diff --git a/src/Makefile.in b/src/Makefile.in index 58394ed..55fec35 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -370,7 +370,7 @@ speexenc_LDADD = $(top_builddir)/libspeex/libspeex.la \ speexdec_SOURCES = speexdec.c wav_io.c speexdec_LDADD = $(top_builddir)/libspeex/libspeex.la \ - $(OGG_LIBS) @WINMM_LIBS@ @FFT_LIBS@ + $(OGG_LIBS) @WINMM_LIBS@ @FFT_LIBS@ -lsndio all: all-am diff --git a/src/speexdec.c b/src/speexdec.c index 4721dc1..c5c39a3 100644 --- a/src/speexdec.c +++ b/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 @@ ((buf[base+1]<<8)&0xff00)| \ (buf[base]&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 *channels) 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; @@ -746,6 +779,10 @@ int main(int argc, char **argv) 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);