From 174eccf07851c4e7f669b194cd8951ca98bc5c81 Mon Sep 17 00:00:00 2001 From: Joerg Mueller Date: Fri, 1 Jan 2010 05:09:30 +0000 Subject: Huge new year audio commit! * Refactored the whole audaspace library to use float as sample format over all readers. * Added new Readers like the linear resampler, envelope, lowpass, highpass and butterworth. * Note: The butterworth filter isn't working correctly, some bug in there... Maybe also true for the envelope. * Added a sound to f-curve operator that behaves mostly like the soundtracker script of technoestupido. --- intern/audaspace/sndfile/AUD_SndFileReader.cpp | 61 +++----------------------- intern/audaspace/sndfile/AUD_SndFileReader.h | 5 --- 2 files changed, 7 insertions(+), 59 deletions(-) (limited to 'intern/audaspace/sndfile') diff --git a/intern/audaspace/sndfile/AUD_SndFileReader.cpp b/intern/audaspace/sndfile/AUD_SndFileReader.cpp index 485818552bb..f9ed8d6388e 100644 --- a/intern/audaspace/sndfile/AUD_SndFileReader.cpp +++ b/intern/audaspace/sndfile/AUD_SndFileReader.cpp @@ -28,31 +28,14 @@ #include -// This function transforms a SampleFormat to our own sample format -static inline AUD_SampleFormat SNDFILE_TO_AUD(int fmt) -{ - switch(fmt & SF_FORMAT_SUBMASK) - { - // only read s16, s32 and double as they are - case SF_FORMAT_PCM_16: - return AUD_FORMAT_S16; - case SF_FORMAT_PCM_32: - return AUD_FORMAT_S32; - case SF_FORMAT_DOUBLE: - return AUD_FORMAT_FLOAT64; - // read all other formats as floats - default: - return AUD_FORMAT_FLOAT32; - } -} - sf_count_t AUD_SndFileReader::vio_get_filelen(void *user_data) { AUD_SndFileReader* reader = (AUD_SndFileReader*)user_data; return reader->m_membuffer.get()->getSize(); } -sf_count_t AUD_SndFileReader::vio_seek(sf_count_t offset, int whence, void *user_data) +sf_count_t AUD_SndFileReader::vio_seek(sf_count_t offset, int whence, + void *user_data) { AUD_SndFileReader* reader = (AUD_SndFileReader*)user_data; @@ -72,14 +55,16 @@ sf_count_t AUD_SndFileReader::vio_seek(sf_count_t offset, int whence, void *user return reader->m_memoffset; } -sf_count_t AUD_SndFileReader::vio_read(void *ptr, sf_count_t count, void *user_data) +sf_count_t AUD_SndFileReader::vio_read(void *ptr, sf_count_t count, + void *user_data) { AUD_SndFileReader* reader = (AUD_SndFileReader*)user_data; if(reader->m_memoffset + count > reader->m_membuffer.get()->getSize()) count = reader->m_membuffer.get()->getSize() - reader->m_memoffset; - memcpy(ptr, reader->m_membuffer.get()->getBuffer() + reader->m_memoffset, count); + memcpy(ptr, ((data_t*)reader->m_membuffer.get()->getBuffer()) + + reader->m_memoffset, count); reader->m_memoffset += count; return count; @@ -103,27 +88,11 @@ AUD_SndFileReader::AUD_SndFileReader(const char* filename) AUD_THROW(AUD_ERROR_FILE); m_specs.channels = (AUD_Channels) sfinfo.channels; - m_specs.format = SNDFILE_TO_AUD(sfinfo.format); m_specs.rate = (AUD_SampleRate) sfinfo.samplerate; m_length = sfinfo.frames; m_seekable = sfinfo.seekable; m_position = 0; - switch(m_specs.format) - { - case AUD_FORMAT_S16: - m_read = (sf_read_f) sf_readf_short; - break; - case AUD_FORMAT_S32: - m_read = (sf_read_f) sf_readf_int; - break; - case AUD_FORMAT_FLOAT64: - m_read = (sf_read_f) sf_readf_double; - break; - default: - m_read = (sf_read_f) sf_readf_float; - } - m_buffer = new AUD_Buffer(); AUD_NEW("buffer") } @@ -147,27 +116,11 @@ AUD_SndFileReader::AUD_SndFileReader(AUD_Reference buffer) AUD_THROW(AUD_ERROR_FILE); m_specs.channels = (AUD_Channels) sfinfo.channels; - m_specs.format = SNDFILE_TO_AUD(sfinfo.format); m_specs.rate = (AUD_SampleRate) sfinfo.samplerate; m_length = sfinfo.frames; m_seekable = sfinfo.seekable; m_position = 0; - switch(m_specs.format) - { - case AUD_FORMAT_S16: - m_read = (sf_read_f) sf_readf_short; - break; - case AUD_FORMAT_S32: - m_read = (sf_read_f) sf_readf_int; - break; - case AUD_FORMAT_FLOAT64: - m_read = (sf_read_f) sf_readf_double; - break; - default: - m_read = (sf_read_f) sf_readf_float; - } - m_buffer = new AUD_Buffer(); AUD_NEW("buffer") } @@ -227,7 +180,7 @@ void AUD_SndFileReader::read(int & length, sample_t* & buffer) buffer = m_buffer->getBuffer(); - length = m_read(m_sndfile, buffer, length); + length = sf_readf_float(m_sndfile, buffer, length); m_position += length; } diff --git a/intern/audaspace/sndfile/AUD_SndFileReader.h b/intern/audaspace/sndfile/AUD_SndFileReader.h index da890ef53ca..8886b6e9efc 100644 --- a/intern/audaspace/sndfile/AUD_SndFileReader.h +++ b/intern/audaspace/sndfile/AUD_SndFileReader.h @@ -70,11 +70,6 @@ private: */ SNDFILE* m_sndfile; - /** - * The reading function. - */ - sf_read_f m_read; - /** * The virtual IO structure for memory file reading. */ -- cgit v1.2.3