diff options
| author | Ray <[email protected]> | 2017-04-04 01:54:49 +0200 |
|---|---|---|
| committer | Ray <[email protected]> | 2017-04-04 01:54:49 +0200 |
| commit | dd4dd0e87d7d215a21b8fc129cbe1adc4b96afe8 (patch) | |
| tree | 724f11991d301fc8bfd01ccd13321f66d8969329 /examples/audio | |
| parent | 5a230659ef39c6eb3bdb5412ca6e1bfc9eeda98e (diff) | |
| download | raylib-dd4dd0e87d7d215a21b8fc129cbe1adc4b96afe8.tar.gz raylib-dd4dd0e87d7d215a21b8fc129cbe1adc4b96afe8.zip | |
Reorganize examples folder
Diffstat (limited to 'examples/audio')
17 files changed, 415 insertions, 0 deletions
diff --git a/examples/audio/audio_module_playing.c b/examples/audio/audio_module_playing.c new file mode 100644 index 00000000..08ae2b05 --- /dev/null +++ b/examples/audio/audio_module_playing.c @@ -0,0 +1,141 @@ +/******************************************************************************************* +* +* raylib [audio] example - Module playing (streaming) +* +* NOTE: This example requires OpenAL Soft library installed +* +* This example has been created using raylib 1.5 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2016 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +#define MAX_CIRCLES 64 + +typedef struct { + Vector2 position; + float radius; + float alpha; + float speed; + Color color; +} CircleWave; + +int main() +{ + // Initialization + //-------------------------------------------------------------------------------------- + int screenWidth = 800; + int screenHeight = 450; + + SetConfigFlags(FLAG_MSAA_4X_HINT); // NOTE: Try to enable MSAA 4X + + InitWindow(screenWidth, screenHeight, "raylib [audio] example - module playing (streaming)"); + + InitAudioDevice(); // Initialize audio device + + Color colors[14] = { ORANGE, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK, + YELLOW, GREEN, SKYBLUE, PURPLE, BEIGE }; + + // Creates ome circles for visual effect + CircleWave circles[MAX_CIRCLES]; + + for (int i = MAX_CIRCLES - 1; i >= 0; i--) + { + circles[i].alpha = 0.0f; + circles[i].radius = GetRandomValue(10, 40); + circles[i].position.x = GetRandomValue(circles[i].radius, screenWidth - circles[i].radius); + circles[i].position.y = GetRandomValue(circles[i].radius, screenHeight - circles[i].radius); + circles[i].speed = (float)GetRandomValue(1, 100)/20000.0f; + circles[i].color = colors[GetRandomValue(0, 13)]; + } + + Music xm = LoadMusicStream("resources/audio/mini1111.xm"); + + PlayMusicStream(xm); + + float timePlayed = 0.0f; + bool pause = false; + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + UpdateMusicStream(xm); // Update music buffer with new stream data + + // Restart music playing (stop and play) + if (IsKeyPressed(KEY_SPACE)) + { + StopMusicStream(xm); + PlayMusicStream(xm); + } + + // Pause/Resume music playing + if (IsKeyPressed(KEY_P)) + { + pause = !pause; + + if (pause) PauseMusicStream(xm); + else ResumeMusicStream(xm); + } + + // Get timePlayed scaled to bar dimensions + timePlayed = GetMusicTimePlayed(xm)/GetMusicTimeLength(xm)*(screenWidth - 40); + + // Color circles animation + for (int i = MAX_CIRCLES - 1; (i >= 0) && !pause; i--) + { + circles[i].alpha += circles[i].speed; + circles[i].radius += circles[i].speed*10.0f; + + if (circles[i].alpha > 1.0f) circles[i].speed *= -1; + + if (circles[i].alpha <= 0.0f) + { + circles[i].alpha = 0.0f; + circles[i].radius = GetRandomValue(10, 40); + circles[i].position.x = GetRandomValue(circles[i].radius, screenWidth - circles[i].radius); + circles[i].position.y = GetRandomValue(circles[i].radius, screenHeight - circles[i].radius); + circles[i].color = colors[GetRandomValue(0, 13)]; + circles[i].speed = (float)GetRandomValue(1, 100)/20000.0f; + } + } + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + for (int i = MAX_CIRCLES - 1; i >= 0; i--) + { + DrawCircleV(circles[i].position, circles[i].radius, Fade(circles[i].color, circles[i].alpha)); + } + + // Draw time bar + DrawRectangle(20, screenHeight - 20 - 12, screenWidth - 40, 12, LIGHTGRAY); + DrawRectangle(20, screenHeight - 20 - 12, (int)timePlayed, 12, MAROON); + DrawRectangleLines(20, screenHeight - 20 - 12, screenWidth - 40, 12, GRAY); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadMusicStream(xm); // Unload music stream buffers from RAM + + CloseAudioDevice(); // Close audio device (music streaming is automatically stopped) + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +}
\ No newline at end of file diff --git a/examples/audio/audio_module_playing.png b/examples/audio/audio_module_playing.png Binary files differnew file mode 100644 index 00000000..8bde9879 --- /dev/null +++ b/examples/audio/audio_module_playing.png diff --git a/examples/audio/audio_music_stream.c b/examples/audio/audio_music_stream.c new file mode 100644 index 00000000..9c1ca4df --- /dev/null +++ b/examples/audio/audio_music_stream.c @@ -0,0 +1,93 @@ +/******************************************************************************************* +* +* raylib [audio] example - Music playing (streaming) +* +* NOTE: This example requires OpenAL Soft library installed +* +* This example has been created using raylib 1.3 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2015 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +int main() +{ + // Initialization + //-------------------------------------------------------------------------------------- + int screenWidth = 800; + int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [audio] example - music playing (streaming)"); + + InitAudioDevice(); // Initialize audio device + + Music music = LoadMusicStream("resources/audio/guitar_noodling.ogg"); + + PlayMusicStream(music); + + float timePlayed = 0.0f; + bool pause = false; + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + UpdateMusicStream(music); // Update music buffer with new stream data + + // Restart music playing (stop and play) + if (IsKeyPressed(KEY_SPACE)) + { + StopMusicStream(music); + PlayMusicStream(music); + } + + // Pause/Resume music playing + if (IsKeyPressed(KEY_P)) + { + pause = !pause; + + if (pause) PauseMusicStream(music); + else ResumeMusicStream(music); + } + + // Get timePlayed scaled to bar dimensions (400 pixels) + timePlayed = GetMusicTimePlayed(music)/GetMusicTimeLength(music)*400; + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + DrawText("MUSIC SHOULD BE PLAYING!", 255, 150, 20, LIGHTGRAY); + + DrawRectangle(200, 200, 400, 12, LIGHTGRAY); + DrawRectangle(200, 200, (int)timePlayed, 12, MAROON); + DrawRectangleLines(200, 200, 400, 12, GRAY); + + DrawText("PRESS SPACE TO RESTART MUSIC", 215, 250, 20, LIGHTGRAY); + DrawText("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, LIGHTGRAY); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadMusicStream(music); // Unload music stream buffers from RAM + + CloseAudioDevice(); // Close audio device (music streaming is automatically stopped) + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +}
\ No newline at end of file diff --git a/examples/audio/audio_music_stream.png b/examples/audio/audio_music_stream.png Binary files differnew file mode 100644 index 00000000..f8b14e15 --- /dev/null +++ b/examples/audio/audio_music_stream.png diff --git a/examples/audio/audio_raw_stream.c b/examples/audio/audio_raw_stream.c new file mode 100644 index 00000000..80c83e96 --- /dev/null +++ b/examples/audio/audio_raw_stream.c @@ -0,0 +1,114 @@ +/******************************************************************************************* +* +* raylib [audio] example - Raw audio streaming +* +* NOTE: This example requires OpenAL Soft library installed +* +* This example has been created using raylib 1.6 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2015 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +#include <stdlib.h> // Required for: malloc(), free() +#include <math.h> // Required for: sinf() + +#define MAX_SAMPLES 22050 +#define MAX_SAMPLES_PER_UPDATE 4096 + +int main() +{ + // Initialization + //-------------------------------------------------------------------------------------- + int screenWidth = 800; + int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [audio] example - raw audio streaming"); + + InitAudioDevice(); // Initialize audio device + + // Init raw audio stream (sample rate: 22050, sample size: 16bit-short, channels: 1-mono) + AudioStream stream = InitAudioStream(22050, 16, 1); + + // Generate samples data from sine wave + short *data = (short *)malloc(sizeof(short)*MAX_SAMPLES); + + // TODO: Review data generation, it seems data is discontinued for loop, + // for that reason, there is a clip everytime audio stream is looped... + for (int i = 0; i < MAX_SAMPLES; i++) + { + data[i] = (short)(sinf(((2*PI*(float)i)/2)*DEG2RAD)*32000); + } + + PlayAudioStream(stream); // Start processing stream buffer (no data loaded currently) + + int totalSamples = MAX_SAMPLES; + int samplesLeft = totalSamples; + + Vector2 position = { 0, 0 }; + + SetTargetFPS(30); // Set our game to run at 30 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + + // Refill audio stream if required + // NOTE: Every update we check if stream data has been already consumed and we update + // buffer with new data from the generated samples, we upload data at a rate (MAX_SAMPLES_PER_UPDATE), + // but notice that at some point we update < MAX_SAMPLES_PER_UPDATE data... + if (IsAudioBufferProcessed(stream)) + { + int numSamples = 0; + if (samplesLeft >= MAX_SAMPLES_PER_UPDATE) numSamples = MAX_SAMPLES_PER_UPDATE; + else numSamples = samplesLeft; + + UpdateAudioStream(stream, data + (totalSamples - samplesLeft), numSamples); + + samplesLeft -= numSamples; + + // Reset samples feeding (loop audio) + if (samplesLeft <= 0) samplesLeft = totalSamples; + } + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + DrawText("SINE WAVE SHOULD BE PLAYING!", 240, 140, 20, LIGHTGRAY); + + // NOTE: Draw a part of the sine wave (only screen width, proportional values) + for (int i = 0; i < GetScreenWidth(); i++) + { + position.x = i; + position.y = 250 + 50*data[i]/32000; + + DrawPixelV(position, RED); + } + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + free(data); // Unload sine wave data + + CloseAudioStream(stream); // Close raw audio stream and delete buffers from RAM + + CloseAudioDevice(); // Close audio device (music streaming is automatically stopped) + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +}
\ No newline at end of file diff --git a/examples/audio/audio_raw_stream.png b/examples/audio/audio_raw_stream.png Binary files differnew file mode 100644 index 00000000..344f4a71 --- /dev/null +++ b/examples/audio/audio_raw_stream.png diff --git a/examples/audio/audio_sound_loading.c b/examples/audio/audio_sound_loading.c new file mode 100644 index 00000000..feb30563 --- /dev/null +++ b/examples/audio/audio_sound_loading.c @@ -0,0 +1,67 @@ +/******************************************************************************************* +* +* raylib [audio] example - Sound loading and playing +* +* NOTE: This example requires OpenAL Soft library installed +* +* This example has been created using raylib 1.0 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2014 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +int main() +{ + // Initialization + //-------------------------------------------------------------------------------------- + int screenWidth = 800; + int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [audio] example - sound loading and playing"); + + InitAudioDevice(); // Initialize audio device + + Sound fxWav = LoadSound("resources/audio/sound.wav"); // Load WAV audio file + Sound fxOgg = LoadSound("resources/audio/tanatana.ogg"); // Load OGG audio file + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + if (IsKeyPressed(KEY_SPACE)) PlaySound(fxWav); // Play WAV sound + if (IsKeyPressed(KEY_ENTER)) PlaySound(fxOgg); // Play OGG sound + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + DrawText("Press SPACE to PLAY the WAV sound!", 200, 180, 20, LIGHTGRAY); + + DrawText("Press ENTER to PLAY the OGG sound!", 200, 220, 20, LIGHTGRAY); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadSound(fxWav); // Unload sound data + UnloadSound(fxOgg); // Unload sound data + + CloseAudioDevice(); // Close audio device + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +}
\ No newline at end of file diff --git a/examples/audio/audio_sound_loading.png b/examples/audio/audio_sound_loading.png Binary files differnew file mode 100644 index 00000000..24071ce3 --- /dev/null +++ b/examples/audio/audio_sound_loading.png diff --git a/examples/audio/resources/audio/chiptun1.mod b/examples/audio/resources/audio/chiptun1.mod Binary files differnew file mode 100644 index 00000000..00d16885 --- /dev/null +++ b/examples/audio/resources/audio/chiptun1.mod diff --git a/examples/audio/resources/audio/coin.wav b/examples/audio/resources/audio/coin.wav Binary files differnew file mode 100644 index 00000000..6007509b --- /dev/null +++ b/examples/audio/resources/audio/coin.wav diff --git a/examples/audio/resources/audio/guitar_noodling.ogg b/examples/audio/resources/audio/guitar_noodling.ogg Binary files differnew file mode 100644 index 00000000..f5022040 --- /dev/null +++ b/examples/audio/resources/audio/guitar_noodling.ogg diff --git a/examples/audio/resources/audio/mini1111.xm b/examples/audio/resources/audio/mini1111.xm Binary files differnew file mode 100644 index 00000000..a185c1a2 --- /dev/null +++ b/examples/audio/resources/audio/mini1111.xm diff --git a/examples/audio/resources/audio/sound.wav b/examples/audio/resources/audio/sound.wav Binary files differnew file mode 100644 index 00000000..b5d01c9b --- /dev/null +++ b/examples/audio/resources/audio/sound.wav diff --git a/examples/audio/resources/audio/spring.wav b/examples/audio/resources/audio/spring.wav Binary files differnew file mode 100644 index 00000000..c7fbf1b9 --- /dev/null +++ b/examples/audio/resources/audio/spring.wav diff --git a/examples/audio/resources/audio/tanatana.flac b/examples/audio/resources/audio/tanatana.flac Binary files differnew file mode 100644 index 00000000..dfe735cd --- /dev/null +++ b/examples/audio/resources/audio/tanatana.flac diff --git a/examples/audio/resources/audio/tanatana.ogg b/examples/audio/resources/audio/tanatana.ogg Binary files differnew file mode 100644 index 00000000..90b1795a --- /dev/null +++ b/examples/audio/resources/audio/tanatana.ogg diff --git a/examples/audio/resources/audio/weird.wav b/examples/audio/resources/audio/weird.wav Binary files differnew file mode 100644 index 00000000..101029c5 --- /dev/null +++ b/examples/audio/resources/audio/weird.wav |
