//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;
}