Updated test program for Emscripten.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
diff --git a/test/loopwavequeue.c b/test/loopwavequeue.c
index 6d71285..babff3b 100644
--- a/test/loopwavequeue.c
+++ b/test/loopwavequeue.c
@@ -15,6 +15,10 @@
#include <stdio.h>
#include <stdlib.h>
+#ifdef __EMSCRIPTEN__
+#include <emscripten/emscripten.h>
+#endif
+
#include "SDL.h"
#if HAVE_SIGNAL_H
@@ -45,6 +49,29 @@ poked(int sig)
done = 1;
}
+void
+loop()
+{
+#ifdef __EMSCRIPTEN__
+ if (done || (SDL_GetAudioStatus() != SDL_AUDIO_PLAYING)) {
+ emscripten_cancel_main_loop();
+ }
+ else
+#endif
+ {
+ /* The device from SDL_OpenAudio() is always device #1. */
+ const Uint32 queued = SDL_GetQueuedAudioSize(1);
+ SDL_Log("Device has %u bytes queued.\n", (unsigned int) queued);
+ if (queued <= 8192) { /* time to requeue the whole thing? */
+ if (SDL_QueueAudio(1, wave.sound, wave.soundlen) == 0) {
+ SDL_Log("Device queued %u more bytes.\n", (unsigned int) wave.soundlen);
+ } else {
+ SDL_Log("Device FAILED to queue %u more bytes: %s\n", (unsigned int) wave.soundlen, SDL_GetError());
+ }
+ }
+ }
+}
+
int
main(int argc, char *argv[])
{
@@ -96,25 +123,22 @@ main(int argc, char *argv[])
/* Let the audio run */
SDL_PauseAudio(0);
+ done = 0;
+
/* Note that we stuff the entire audio buffer into the queue in one
shot. Most apps would want to feed it a little at a time, as it
plays, but we're going for simplicity here. */
+#ifdef __EMSCRIPTEN__
+ emscripten_set_main_loop(loop, 0, 1);
+#else
while (!done && (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING))
{
- /* The device from SDL_OpenAudio() is always device #1. */
- const Uint32 queued = SDL_GetQueuedAudioSize(1);
- SDL_Log("Device has %u bytes queued.\n", (unsigned int) queued);
- if (queued <= 8192) { /* time to requeue the whole thing? */
- if (SDL_QueueAudio(1, wave.sound, wave.soundlen) == 0) {
- SDL_Log("Device queued %u more bytes.\n", (unsigned int) wave.soundlen);
- } else {
- SDL_Log("Device FAILED to queue %u more bytes: %s\n", (unsigned int) wave.soundlen, SDL_GetError());
- }
- }
+ loop();
SDL_Delay(100); /* let it play for awhile. */
}
+#endif
/* Clean up on signal */
SDL_CloseAudio();