change SDL 1.2 to SDL 2.0
[platform/upstream/SDL.git] / test / loopwave.c
index e1df747..ec9f528 100644 (file)
@@ -1,8 +1,19 @@
+/*
+  Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
 
-/* Program to load a wave file and loop playing it using SDL sound */
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
 
-/* loopwaves.c is much more robust in handling WAVE files -- 
-       This is only for simple WAVEs
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely.
+*/
+
+/* Program to load a wave file and loop playing it using SDL audio */
+
+/* loopwaves.c is much more robust in handling WAVE files --
+    This is only for simple WAVEs
 */
 #include "SDL_config.h"
 
 #include <signal.h>
 #endif
 
+#ifdef __EMSCRIPTEN__
+#include <emscripten/emscripten.h>
+#endif
+
 #include "SDL.h"
-#include "SDL_audio.h"
 
-struct {
-       SDL_AudioSpec spec;
-       Uint8   *sound;                 /* Pointer to wave data */
-       Uint32   soundlen;              /* Length of wave data */
-       int      soundpos;              /* Current play position */
+struct
+{
+    SDL_AudioSpec spec;
+    Uint8 *sound;               /* Pointer to wave data */
+    Uint32 soundlen;            /* Length of wave data */
+    int soundpos;               /* Current play position */
 } wave;
 
 
 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
-static void quit(int rc)
+static void
+quit(int rc)
 {
-       SDL_Quit();
-       exit(rc);
+    SDL_Quit();
+    exit(rc);
 }
 
 
-void SDLCALL fillerup(void *unused, Uint8 *stream, int len)
+void SDLCALL
+fillerup(void *unused, Uint8 * stream, int len)
 {
-       Uint8 *waveptr;
-       int    waveleft;
-
-       /* Set up the pointers */
-       waveptr = wave.sound + wave.soundpos;
-       waveleft = wave.soundlen - wave.soundpos;
-
-       /* Go! */
-       while ( waveleft <= len ) {
-               SDL_memcpy(stream, waveptr, waveleft);
-               stream += waveleft;
-               len -= waveleft;
-               waveptr = wave.sound;
-               waveleft = wave.soundlen;
-               wave.soundpos = 0;
-       }
-       SDL_memcpy(stream, waveptr, len);
-       wave.soundpos += len;
+    Uint8 *waveptr;
+    int waveleft;
+
+    /* Set up the pointers */
+    waveptr = wave.sound + wave.soundpos;
+    waveleft = wave.soundlen - wave.soundpos;
+
+    /* Go! */
+    while (waveleft <= len) {
+        SDL_memcpy(stream, waveptr, waveleft);
+        stream += waveleft;
+        len -= waveleft;
+        waveptr = wave.sound;
+        waveleft = wave.soundlen;
+        wave.soundpos = 0;
+    }
+    SDL_memcpy(stream, waveptr, len);
+    wave.soundpos += len;
 }
 
 static int done = 0;
-void poked(int sig)
+void
+poked(int sig)
 {
-       done = 1;
+    done = 1;
 }
 
-int main(int argc, char *argv[])
+#ifdef __EMSCRIPTEN__
+void
+loop()
 {
-       char name[32];
-
-       /* Load the SDL library */
-       if ( SDL_Init(SDL_INIT_AUDIO) < 0 ) {
-               fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
-               return(1);
-       }
-       if ( argv[1] == NULL ) {
-               argv[1] = "sample.wav";
-       }
-       /* Load the wave file into memory */
-       if ( SDL_LoadWAV(argv[1],
-                       &wave.spec, &wave.sound, &wave.soundlen) == NULL ) {
-               fprintf(stderr, "Couldn't load %s: %s\n",
-                                               argv[1], SDL_GetError());
-               quit(1);
-       }
-
-       wave.spec.callback = fillerup;
+    if(done || (SDL_GetAudioStatus() != SDL_AUDIO_PLAYING))
+        emscripten_cancel_main_loop();
+}
+#endif
+
+int
+main(int argc, char *argv[])
+{
+    int i;
+    char filename[4096];
+
+    /* Enable standard application logging */
+    SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
+
+    /* Load the SDL library */
+    if (SDL_Init(SDL_INIT_AUDIO) < 0) {
+        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
+        return (1);
+    }
+
+    if (argc > 1) {
+        SDL_strlcpy(filename, argv[1], sizeof(filename));
+    } else {
+        SDL_strlcpy(filename, "sample.wav", sizeof(filename));
+    }
+    /* Load the wave file into memory */
+    if (SDL_LoadWAV(filename, &wave.spec, &wave.sound, &wave.soundlen) == NULL) {
+        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", filename, SDL_GetError());
+        quit(1);
+    }
+
+    wave.spec.callback = fillerup;
 #if HAVE_SIGNAL_H
-       /* Set the signals */
+    /* Set the signals */
 #ifdef SIGHUP
-       signal(SIGHUP, poked);
+    signal(SIGHUP, poked);
 #endif
-       signal(SIGINT, poked);
+    signal(SIGINT, poked);
 #ifdef SIGQUIT
-       signal(SIGQUIT, poked);
+    signal(SIGQUIT, poked);
 #endif
-       signal(SIGTERM, poked);
+    signal(SIGTERM, poked);
 #endif /* HAVE_SIGNAL_H */
 
-       /* Initialize fillerup() variables */
-       if ( SDL_OpenAudio(&wave.spec, NULL) < 0 ) {
-               fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError());
-               SDL_FreeWAV(wave.sound);
-               quit(2);
-       }
-       SDL_PauseAudio(0);
-
-       /* Let the audio run */
-       printf("Using audio driver: %s\n", SDL_AudioDriverName(name, 32));
-       while ( ! done && (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING) )
-               SDL_Delay(1000);
-
-       /* Clean up on signal */
-       SDL_CloseAudio();
-       SDL_FreeWAV(wave.sound);
-       SDL_Quit();
-       return(0);
+    /* Show the list of available drivers */
+    SDL_Log("Available audio drivers:");
+    for (i = 0; i < SDL_GetNumAudioDrivers(); ++i) {
+        SDL_Log("%i: %s", i, SDL_GetAudioDriver(i));
+    }
+
+    /* Initialize fillerup() variables */
+    if (SDL_OpenAudio(&wave.spec, NULL) < 0) {
+        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open audio: %s\n", SDL_GetError());
+        SDL_FreeWAV(wave.sound);
+        quit(2);
+    }
+
+    SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver());
+
+    /* Let the audio run */
+    SDL_PauseAudio(0);
+
+#ifdef __EMSCRIPTEN__
+    emscripten_set_main_loop(loop, 0, 1);
+#else
+    while (!done && (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING))
+        SDL_Delay(1000);
+#endif
+
+    /* Clean up on signal */
+    SDL_CloseAudio();
+    SDL_FreeWAV(wave.sound);
+    SDL_Quit();
+    return (0);
 }
+
+/* vi: set ts=4 sw=4 expandtab: */