//emcc -o test.html main.cpp -O2 -s USE_SDL=2 #include #if defined(_MSC_VER) #include "SDL.h" #else #include "SDL2/SDL.h" #endif #include #include #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; }