X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dos_sbtest;a=blobdiff_plain;f=src%2Fmain.c;h=1d148d0877fac7173af1e9200eea5523f551b151;hp=fd87b7a97b6af5f9001c8070a1d9f142588de9ef;hb=b4ee0075a2a231ef06e333b77510187aeb22f8fa;hpb=85710b37e4082a5b8e6d35c16311cb024298e24f diff --git a/src/main.c b/src/main.c index fd87b7a..1d148d0 100644 --- a/src/main.c +++ b/src/main.c @@ -1,43 +1,75 @@ -#include -#include -#include "audio.h" - -static int au_callback(void *buffer, int size, void *cls); - -/* defined in ausamples.s */ -extern signed char snd_click[]; -extern int snd_click_size; - -int main(int argc, char **argv) -{ - audio_init(); - audio_set_callback(au_callback, 0); - - audio_play(22050, 1); - - return 0; -} - -/* snd_click_size is < 65536 so we can just throw it all at once in there */ -static int au_callback(void *buffer, int size, void *cls) -{ - int i; - signed char *ptr = buffer; - signed char *src = snd_click; - /* - for(i=0; i +#include +#include +#include +#include +#include "audio.h" + +static int au_callback(void *buffer, int size, void *cls); + +static signed char *snd_click; +static int snd_click_size; + +static int dbg_cbcalled; + +int main(int argc, char **argv) +{ + FILE *fp; + + if(!(fp = fopen("click.pcm", "rb"))) { + fprintf(stderr, "failed to open click.pcm\n"); + return 1; + } + fseek(fp, 0, SEEK_END); + snd_click_size = ftell(fp); + rewind(fp); + if(!(snd_click = malloc(snd_click_size))) { + fprintf(stderr, "failed to allocate sound sample\n"); + return 1; + } + fread(snd_click, 1, snd_click_size, fp); + fclose(fp); + + audio_init(); + audio_set_callback(au_callback, 0); + + for(;;) { + if(kbhit()) { + int c = getch(); + switch(c) { + case 27: + goto end; + case ' ': + if(audio_isplaying()) { + audio_stop(); + } else { + audio_play(22050, 8, 1); + } + break; + default: + break; + } + } + + _disable(); + if(dbg_cbcalled) { + dbg_cbcalled = 0; + _enable(); + printf("callback called!\n"); + } else { + _enable(); + } + } + +end: + audio_stop(); + return 0; +} + +/* snd_click_size is < 65536 so we can just throw it all at once in there */ +static int au_callback(void *buffer, int size, void *cls) +{ + dbg_cbcalled = 1; + memcpy(buffer, snd_click, snd_click_size); + return snd_click_size; +}