From 05b03f4204cc7f526762169761acea487ae2a574 Mon Sep 17 00:00:00 2001 From: Kim Woelders Date: Sun, 21 Oct 2012 15:57:21 +0000 Subject: [PATCH] Enable using libsndfile for sound file loading. SVN revision: 78308 --- configure.ac | 42 ++++++++++++++++++++++------------- src/Makefile.am | 15 ++++++++----- src/sound_load.c | 58 +++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 88 insertions(+), 27 deletions(-) diff --git a/configure.ac b/configure.ac index 30fe2f68..e7849c0c 100644 --- a/configure.ac +++ b/configure.ac @@ -92,19 +92,31 @@ if test "x$enable_sound" = "xyes"; then AC_ARG_ENABLE(sound_esound, [ --enable-sound-esound compile with EsounD sound support @<:@default=yes@:>@],, enable_sound_esound=yes) + AC_ARG_WITH(sndldr, + [ --with-sndldr select sound loader (audiofile/sndfile/none) @<:@default=audiofile@:>@],, + with_sndldr=audiofile) fi enable_sound=no -if test "x$enable_sound_pulse" = "xyes"; then - PKG_CHECK_MODULES(PA, libpulse,, enable_sound_pulse=no) +if test "x$with_sndldr" = "xsndfile"; then + PKG_CHECK_MODULES(SNDFILE, sndfile, + AC_DEFINE(USE_SOUND_LOADER_SNDFILE, 1, [Use sndfile sound loader]), + with_sndldr=none) fi + +if test "x$with_sndldr" = "xaudiofile"; then + PKG_CHECK_MODULES(AUDIOFILE, audiofile, + AC_DEFINE(USE_SOUND_LOADER_AUDIOFILE, 1, [Use audiofile sound loader]), + with_sndldr=none) +fi + if test "x$enable_sound_pulse" = "xyes"; then - AC_DEFINE(HAVE_SOUND, 1, [Sound support]) - AC_DEFINE(HAVE_SOUND_PA, 1, [PulseAudio sound support]) - AC_DEFINE(USE_SOUND_LOADER_AUDIOFILE, 1, [Use audiofile sound loader]) - PKG_CHECK_MODULES(AUDIOFILE, audiofile,,) - enable_sound=pulseaudio - enable_sound_esound=no + PKG_CHECK_MODULES(PA, libpulse, + AC_DEFINE(HAVE_SOUND, 1, [Sound support]) + AC_DEFINE(HAVE_SOUND_PA, 1, [PulseAudio sound support]) + enable_sound=pulseaudio + enable_sound_esound=no, + enable_sound_pulse=no) fi AM_CONDITIONAL(USE_LIBPA, test "x$enable_sound_pulse" = "xyes") @@ -113,14 +125,11 @@ if test "x$enable_sound_esound" = "xyes"; then enable_sound_esound=no AC_MSG_WARN([EsounD sound support was requested but not found.]) ]) - AC_CHECK_HEADERS(audiofile.h,, enable_sound_esound=no) -fi -if test "x$enable_sound_esound" = "xyes"; then - AC_DEFINE(HAVE_SOUND, 1, [Sound support]) - AC_DEFINE(HAVE_SOUND_ESD, 1, [EsounD sound support]) - AC_DEFINE(USE_SOUND_LOADER_AUDIOFILE, 1, [Use audiofile sound loader]) - PKG_CHECK_MODULES(AUDIOFILE, audiofile,,) - enable_sound=esound + if test "x$enable_sound_esound" = "xyes"; then + AC_DEFINE(HAVE_SOUND, 1, [Sound support]) + AC_DEFINE(HAVE_SOUND_ESD, 1, [EsounD sound support]) + enable_sound=esound + fi fi AM_CONDITIONAL(USE_LIBESD, test "x$enable_sound_esound" = "xyes") @@ -479,6 +488,7 @@ echo echo "Support for" echo " Localisation ................. $USE_NLS" echo " Sound ........................ $enable_sound" +echo " Sound loader ................. $with_sndldr" echo " Old GNOME hints .............. $enable_hints_gnome" echo " Session management ........... $enable_sm" echo " Zoom ......................... $enable_zoom" diff --git a/src/Makefile.am b/src/Makefile.am index 8dc603cd..f29f54bb 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -156,6 +156,9 @@ LDADD = \ $(CLOCK_LIBS) \ -lX11 -lm +SNDLDR_CFLAGS = $(AUDIOFILE_CFLAGS) $(SNDFILE_CFLAGS) +SNDLDR_LIBS = $(AUDIOFILE_LIBS) $(SNDFILE_LIBS) + if BUILD_MODULES e16_LDFLAGS = -export-dynamic @@ -168,16 +171,16 @@ libe16_LTLIBRARIES = $(LIBSND_ESD) $(LIBSND_PA) $(LIBFNT_IFT) $(LIBFNT_XFT) $(LI if USE_LIBESD LIBSND_ESD = libsound_esd.la libsound_esd_la_SOURCES = sound_esd.c sound_load.c -libsound_esd_la_CFLAGS = $(ESD_CFLAGS) $(AUDIOFILE_CFLAGS) $(CWARNFLAGS) -libsound_esd_la_LIBADD = $(ESD_LIBS) $(AUDIOFILE_LIBS) +libsound_esd_la_CFLAGS = $(ESD_CFLAGS) $(SNDLDR_CFLAGS) $(CWARNFLAGS) +libsound_esd_la_LIBADD = $(ESD_LIBS) $(SNDLDR_LIBS) libsound_esd_la_LDFLAGS = -module -avoid-version endif if USE_LIBPA LIBSND_PA = libsound_pa.la libsound_pa_la_SOURCES = sound_pa.c sound_load.c -libsound_pa_la_CFLAGS = $(PA_CFLAGS) $(AUDIOFILE_CFLAGS) $(CWARNFLAGS) -libsound_pa_la_LIBADD = $(PA_LIBS) $(AUDIOFILE_LIBS) +libsound_pa_la_CFLAGS = $(PA_CFLAGS) $(SNDLDR_CFLAGS) $(CWARNFLAGS) +libsound_pa_la_LIBADD = $(PA_LIBS) $(SNDLDR_LIBS) libsound_pa_la_LDFLAGS = -module -avoid-version endif @@ -206,8 +209,8 @@ endif else MODULE_SRCS = sound_esd.c sound_pa.c sound_load.c ttfont.c text_xft.c text_pango.c -MODULE_LIBS = $(ESD_LIBS) $(PA_LIBS) $(AUDIOFILE_LIBS) $(PANGO_LIBS) $(XFT_LIBS) -MODULE_CFLAGS = $(ESD_CFLAGS) $(PA_CFLAGS) $(AUDIOFILE_CFLAGS) $(PANGO_CFLAGS) $(XFT_CFLAGS) +MODULE_LIBS = $(ESD_LIBS) $(PA_LIBS) $(SNDLDR_LIBS) $(PANGO_LIBS) $(XFT_LIBS) +MODULE_CFLAGS = $(ESD_CFLAGS) $(PA_CFLAGS) $(SNDLDR_CFLAGS) $(PANGO_CFLAGS) $(XFT_CFLAGS) endif diff --git a/src/sound_load.c b/src/sound_load.c index 02971aa3..64f91fca 100644 --- a/src/sound_load.c +++ b/src/sound_load.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various contributors - * Copyright (C) 2004-2008 Kim Woelders + * Copyright (C) 2004-2012 Kim Woelders * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -22,9 +22,11 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "E.h" + #if HAVE_SOUND -#if USE_SOUND_LOADER_AUDIOFILE #include "sound.h" + +#if USE_SOUND_LOADER_AUDIOFILE #include int @@ -48,14 +50,15 @@ SoundSampleGetData(const char *file, SoundSampleData * ssd) #else afSetVirtualByteOrder(in_file, AF_DEFAULT_TRACK, AF_BYTEORDER_LITTLEENDIAN); #endif - if (EDebug(EDBUG_TYPE_SOUND)) - Eprintf("SoundSampleGetData chan=%d width=%d rate=%d\n", ssd->channels, - ssd->bit_per_sample, ssd->rate); bytes_per_frame = (ssd->bit_per_sample * ssd->channels) / 8; ssd->size = frame_count * bytes_per_frame; ssd->data = EMALLOC(unsigned char, ssd->size); + if (EDebug(EDBUG_TYPE_SOUND)) + Eprintf("SoundSampleGetData frames=%u chan=%u width=%u rate=%u\n", + frame_count, ssd->channels, ssd->bit_per_sample, ssd->rate); + frames_read = afReadFrames(in_file, AF_DEFAULT_TRACK, ssd->data, frame_count); @@ -73,4 +76,49 @@ SoundSampleGetData(const char *file, SoundSampleData * ssd) #endif /* USE_SOUND_LOADER_AUDIOFILE */ +#if USE_SOUND_LOADER_SNDFILE +#include + +int +SoundSampleGetData(const char *file, SoundSampleData * ssd) +{ + SNDFILE *sf; + SF_INFO sf_info; + int bytes_per_frame, frame_count, frames_read; + + sf = sf_open(file, SFM_READ, &sf_info); + if (!sf) + return -1; + + ssd->channels = (unsigned int)sf_info.channels; + ssd->rate = (unsigned int)sf_info.samplerate; + ssd->bit_per_sample = 16; + + frame_count = sf_info.frames; + bytes_per_frame = (ssd->bit_per_sample * ssd->channels) / 8; + ssd->size = frame_count * bytes_per_frame; + ssd->data = EMALLOC(unsigned char, ssd->size); + + if (EDebug(EDBUG_TYPE_SOUND)) + Eprintf("SoundSampleGetData frames=%u chan=%u width=%u rate=%u\n", + frame_count, ssd->channels, ssd->bit_per_sample, ssd->rate); + + frames_read = sf_readf_short(sf, ssd->data, frame_count); + + sf_close(sf); + + if (frames_read <= 0) + { + ssd->size = 0; + _EFREE(ssd->data); + return -1; + } + + ssd->size = frames_read * bytes_per_frame; + + return 0; +} + +#endif /* USE_SOUND_LOADER_SNDFILE */ + #endif /* HAVE_SOUND */