Enable using libsndfile for sound file loading.

SVN revision: 78308
This commit is contained in:
Kim Woelders 2012-10-21 15:57:21 +00:00
parent 8909a89c48
commit 05b03f4204
3 changed files with 88 additions and 27 deletions

View File

@ -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"

View File

@ -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

View File

@ -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 <audiofile.h>
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 <sndfile.h>
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 */