Use sndio for audio

--- tools/celtdec.c.orig	Mon Mar 14 14:16:13 2011
+++ tools/celtdec.c	Fri Apr 20 09:40:30 2012
@@ -66,6 +66,9 @@
 #include <fcntl.h>
 #include <sys/ioctl.h>
 
+#elif defined USE_SNDIO
+#include <sndio.h>
+
 #elif defined HAVE_SYS_AUDIOIO_H
 #include <sys/types.h>
 #include <fcntl.h>
@@ -88,6 +91,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;
@@ -183,6 +190,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;
@@ -612,6 +645,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);
                   
@@ -668,6 +705,9 @@ int main(int argc, char **argv)
       fclose(fin);
    if (fout != NULL)
       fclose(fout);   
+
+   if (print_bitrate)
+      fprintf (stderr, "\n");
 
    return 0;
 }
