summaryrefslogtreecommitdiff
path: root/audiotest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'audiotest.cpp')
-rw-r--r--audiotest.cpp101
1 files changed, 101 insertions, 0 deletions
diff --git a/audiotest.cpp b/audiotest.cpp
new file mode 100644
index 0000000..f6b5a92
--- /dev/null
+++ b/audiotest.cpp
@@ -0,0 +1,101 @@
+//emcc -o test.html main.cpp -O2 -s USE_SDL=2
+
+#include <stdlib.h>
+
+#if defined(_MSC_VER)
+#include "SDL.h"
+#else
+#include "SDL2/SDL.h"
+#endif
+
+#include <math.h>
+#include <stdio.h>
+
+#ifdef __EMSCRIPTEN__
+#include "emscripten.h"
+#endif
+
+
+
+void audiomixer(void *userdata, Uint8 *stream, int len)
+{
+ int samples = len / 4;
+ short *buf = (short*)stream;
+
+ int i;
+ for (i = 0; i < samples*2; i++)
+ {
+ buf[i] = i * 655;
+ }
+}
+
+int sdlstatic_init(unsigned int aSamplerate, unsigned int aBuffer)
+{
+ SDL_AudioSpec as;
+ as.freq = aSamplerate;
+ as.format = AUDIO_S16;
+ as.channels = 2;
+ as.samples = aBuffer;
+ as.callback = audiomixer;
+
+ SDL_AudioSpec as2;
+ if (SDL_OpenAudio(&as, &as2) < 0)
+ {
+ return -1;
+ }
+
+ SDL_PauseAudio(0);
+
+ return 0;
+}
+
+void mainloop()
+{
+ // Poll for events, and handle the ones we care about.
+ SDL_Event event;
+ while (SDL_PollEvent(&event))
+ {
+ switch (event.type)
+ {
+ case SDL_KEYUP:
+ // If escape is pressed, return (and thus, quit)
+ switch (event.key.keysym.sym)
+ {
+ case SDLK_ESCAPE:
+ {
+ exit(0);
+ }
+ break;
+ }
+ break;
+ case SDL_QUIT:
+ SDL_CloseAudio();
+ exit(0);
+ }
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ printf("SDL INIT OK\n");
+ if ( SDL_Init(SDL_INIT_EVERYTHING) < 0 )
+ {
+ fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
+ exit(1);
+ }
+ printf("SDL INIT OK\n");
+
+ atexit(SDL_Quit);
+
+ sdlstatic_init(44100, 1024);
+
+#ifdef __EMSCRIPTEN__
+ emscripten_set_main_loop(mainloop, 60, 0);
+#else
+ while (1)
+ {
+ mainloop();
+ }
+#endif
+ return 0;
+}