diff -ur ../v0.1-beforelibao/configure.in ./configure.in --- ../v0.1-beforelibao/configure.in Sun Apr 27 22:03:19 2003 +++ ./configure.in Mon Apr 28 01:15:47 2003 @@ -11,6 +11,20 @@ AC_HEADER_STDC XIPH_PATH_VORBIS(,AC_MSG_ERROR(linogg needs vorbis)) + +use_libao="no" +AC_ARG_ENABLE([libao], + AC_HELP_STRING([--enable-libao],[use libao (default is NO)]), + use_libao=yes) + +if test "x$use_libao" != "xno"; then + XIPH_PATH_AO(,AC_MSG_ERROR([--enable-libao needs a working libao])) + AC_MSG_NOTICE(Using libao to play audio) + CFLAGS="$CFLAGS -DUSE_LIBAO" +else + AC_MSG_NOTICE(Using OSS to play audio) +fi + pkg_modules="gtk+-2.0 >= 2.0.0 gthread-2.0 > 2.0.0" PKG_CHECK_MODULES(PACKAGE, [$pkg_modules]) AC_SUBST(PACKAGE_CFLAGS) diff -ur ../v0.1-beforelibao/src/Makefile.am ./src/Makefile.am --- ../v0.1-beforelibao/src/Makefile.am Sun Apr 27 22:01:51 2003 +++ ./src/Makefile.am Sun Apr 27 22:05:42 2003 @@ -3,7 +3,7 @@ INCLUDES = \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ - @PACKAGE_CFLAGS@ @VORBIS_CFLAGS@ + @PACKAGE_CFLAGS@ @VORBIS_CFLAGS@ @AO_CFLAGS@ bin_PROGRAMS = linogg @@ -14,4 +14,5 @@ callbacks.c callbacks.h \ audio.c threads.c -linogg_LDADD = @PACKAGE_LIBS@ $(INTLLIBS) @VORBIS_LIBS@ @VORBISFILE_LIBS@ +linogg_LDADD = @PACKAGE_LIBS@ @VORBIS_LIBS@ @VORBISFILE_LIBS@ \ + @AO_LIBS@ $(INTLLIBS) diff -ur ../v0.1-beforelibao/src/audio.c ./src/audio.c --- ../v0.1-beforelibao/src/audio.c Sun Apr 27 22:02:44 2003 +++ ./src/audio.c Sun Apr 27 22:08:30 2003 @@ -1,5 +1,19 @@ #include "linogg.h" +#ifdef USE_LIBAO +#include +#else +#include +#include +#endif + +#ifdef USE_LIBAO +static ao_device *audio_dev; +static int audio_driver_id; +#else +int audioDev; +#endif + int openVorb(char *filename,struct playData *play_data) { if (filename == NULL || (strlen(filename) < 5 || (file = fopen(filename,"r")) == NULL)) @@ -22,25 +36,57 @@ int audioOpen() { +#ifdef USE_LIBAO + static int initialized = 0; + if(!initialized) { + ao_initialize(); + initialized = 1; + } + audio_driver_id = ao_default_driver_id(); + if(audio_driver_id == -1) { + fprintf(stderr,"ao_defaut_driver_id() failed. No useable audio device\n"); + return -1; + } +#else if ((audioDev = open("/dev/dsp",O_WRONLY,0)) == -1) { perror("/dev/dsp"); return -1; } +#endif return 0; } void audioClose() { +#if USE_LIBAO + if(audio_dev != NULL) + if(ao_close(audio_dev) == 0) + fprintf(stderr,"Error closing ao device\n"); +#else if (audioDev == -1) return; else close(audioDev); return; +#endif } int audioSet(int channels, long rate) { +#ifdef USE_LIBAO + ao_sample_format format = { + 16, /* bits */ + (int)rate, + channels, + AO_FMT_LITTLE, /* byte order */ + }; + audio_dev = ao_open_live(audio_driver_id,&format,NULL); + if(audio_dev == NULL) { + fprintf(stderr,"Failed to open audio device\n"); + return -1; + } +#else int reqChan; long reqRate; int format = AFMT_S16_LE; @@ -73,6 +119,24 @@ printf("\nSample rate wasn't supported!"); return -1; } +#endif return 0; +} + +int audioPlay(const char *buf, size_t bytes) +{ +#ifdef USE_LIBAO + return ao_play(audio_dev,buf,bytes) == 0 ? -1 : 0; +#else + int n; + while(bytes) { + n = write(audioDev,buf,bytes); + if(n < 0) + return -1; + buf += n; + bytes -= n; + } + return 0; +#endif } diff -ur ../v0.1-beforelibao/src/linogg.h ./src/linogg.h --- ../v0.1-beforelibao/src/linogg.h Sun Apr 27 22:02:43 2003 +++ ./src/linogg.h Sun Apr 27 22:10:37 2003 @@ -3,10 +3,8 @@ #include #include -#include #include #include -#include #include #include #include @@ -42,6 +40,7 @@ int audioOpen(); void audioClose(); int audioSet(int, long); +int audioPlay(const char*,size_t); void shutdown(); int make_play_thread(); gpointer playFunc(gpointer); diff -ur ../v0.1-beforelibao/src/main.c ./src/main.c --- ../v0.1-beforelibao/src/main.c Sun Apr 27 22:01:53 2003 +++ ./src/main.c Sun Apr 27 23:04:33 2003 @@ -71,6 +71,7 @@ gtk_init (&argc, &argv); add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps"); + add_pixmap_directory ("pixmaps"); /* * The following code was added by Glade to create one of each component diff -ur ../v0.1-beforelibao/src/threads.c ./src/threads.c --- ../v0.1-beforelibao/src/threads.c Sun Apr 27 22:02:45 2003 +++ ./src/threads.c Sun Apr 27 22:11:34 2003 @@ -48,8 +48,7 @@ } else { - writeAud = write (audioDev,buffer,totBytes); - if (writeAud < 0) + if (audioPlay(buffer,totBytes) < 0) { printf("\nProblem writing to sound card!"); return (gpointer)0;