summaryrefslogtreecommitdiffhomepage
path: root/docs/examples/web/audio/audio_module_playing.c
diff options
context:
space:
mode:
authorRay <[email protected]>2017-04-09 23:46:47 +0200
committerRay <[email protected]>2017-04-09 23:46:47 +0200
commitf7bebf9861734c47d0840868f243b186a59a96ba (patch)
treef5ca2d320c680ef5926b5455e4498646031cd5ac /docs/examples/web/audio/audio_module_playing.c
parent8374460c3986b16c68a6dea0643e9af541987d52 (diff)
downloadraylib-f7bebf9861734c47d0840868f243b186a59a96ba.tar.gz
raylib-f7bebf9861734c47d0840868f243b186a59a96ba.zip
Working on web examples
Reorganizing folders Review examples Work on makefile and loader.html
Diffstat (limited to 'docs/examples/web/audio/audio_module_playing.c')
-rw-r--r--docs/examples/web/audio/audio_module_playing.c170
1 files changed, 170 insertions, 0 deletions
diff --git a/docs/examples/web/audio/audio_module_playing.c b/docs/examples/web/audio/audio_module_playing.c
new file mode 100644
index 00000000..2f0f8c1c
--- /dev/null
+++ b/docs/examples/web/audio/audio_module_playing.c
@@ -0,0 +1,170 @@
+/*******************************************************************************************
+*
+* 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"
+
+#if defined(PLATFORM_WEB)
+ #include <emscripten/emscripten.h>
+#endif
+
+#define MAX_CIRCLES 32
+
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+//----------------------------------------------------------------------------------
+typedef struct {
+ Vector2 position;
+ float radius;
+ float alpha;
+ float speed;
+ Color color;
+} CircleWave;
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition
+//----------------------------------------------------------------------------------
+int screenWidth = 800;
+int screenHeight = 450;
+
+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];
+
+Music xm;
+
+float timePlayed = 0.0f;
+static bool pause = false;
+
+//----------------------------------------------------------------------------------
+// Module Functions Declaration
+//----------------------------------------------------------------------------------
+void UpdateDrawFrame(void); // Update and Draw one frame
+
+//----------------------------------------------------------------------------------
+// Main Enry Point
+//----------------------------------------------------------------------------------
+int main()
+{
+ // Initialization
+ //--------------------------------------------------------------------------------------
+ InitWindow(screenWidth, screenHeight, "raylib [audio] example - module playing (streaming)");
+
+ InitAudioDevice(); // Initialize audio device
+
+ 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)];
+ }
+
+ xm = LoadMusicStream("resources/mini1111.xm");
+
+ PlayMusicStream(xm); // Play module stream
+
+#if defined(PLATFORM_WEB)
+ emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
+#else
+ SetTargetFPS(60); // Set our game to run at 60 frames-per-second
+ //--------------------------------------------------------------------------------------
+
+ // Main game loop
+ while (!WindowShouldClose()) // Detect window close button or ESC key
+ {
+ UpdateDrawFrame();
+ }
+#endif
+
+ // 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;
+}
+
+//----------------------------------------------------------------------------------
+// Module Functions Definition
+//----------------------------------------------------------------------------------
+void UpdateDrawFrame(void)
+{
+ // 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);
+
+ for (int i = MAX_CIRCLES - 1; i >= 0; 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();
+ //----------------------------------------------------------------------------------
+} \ No newline at end of file