Index: src/speexdec.c --- src/speexdec.c.orig +++ src/speexdec.c @@ -67,6 +67,9 @@ #include #include +#elif defined USE_SNDIO +#include + #elif defined HAVE_SYS_AUDIOIO_H #include #include @@ -91,6 +94,10 @@ (((unsigned)buf[1]<<8)&0xff00)| \ ((unsigned)buf[0]&0xff)) +#ifdef USE_SNDIO +struct sio_hdl *hdl; +#endif + static void print_comments(char *comments, int length) { char *c=comments; @@ -186,6 +193,32 @@ FILE *out_file_open(char *outFile, int rate, int *chan exit(1); } fout = fdopen(audio_fd, "w"); +#elif defined USE_SNDIO + struct sio_par par; + + hdl = sio_open(NULL, SIO_PLAY, 0); + if (!hdl) + { + fprintf(stderr, "Cannot open sndio device\n"); + exit(1); + } + + sio_initpar(&par); + par.sig = 1; + par.bits = 16; + par.rate = rate; + par.pchan = *channels; + + if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par) || + par.sig != 1 || par.bits != 16 || par.rate != rate) { + fprintf(stderr, "could not set sndio parameters\n"); + exit(1); + } + *channels = par.pchan; + if (!sio_start(hdl)) { + fprintf(stderr, "could not start sndio\n"); + exit(1); + } #elif defined HAVE_SYS_AUDIOIO_H audio_info_t info; int audio_fd; @@ -745,6 +778,10 @@ int main(int argc, char **argv) #if defined WIN32 || defined _WIN32 if (strlen(outFile)==0) WIN_Play_Samples (out+frame_offset*channels, sizeof(short) * new_frame_size*channels); + else +#elif defined USE_SNDIO + if (strlen(outFile)==0) + sio_write (hdl, out+frame_offset*channels, sizeof(short) * new_frame_size*channels); else #endif fwrite(out+frame_offset*channels, sizeof(short), new_frame_size*channels, fout);