diff options
author | Joerg Mueller <nexyon@gmail.com> | 2010-02-08 17:43:44 +0300 |
---|---|---|
committer | Joerg Mueller <nexyon@gmail.com> | 2010-02-08 17:43:44 +0300 |
commit | 6c8e3e303d15b59df4c592244a7650021b4e8bbb (patch) | |
tree | dc4d0693751795b506b7c4b3fea39875628b8e76 /intern/audaspace/SRC/AUD_SRCResampleReader.cpp | |
parent | 03bdfb6f312a0259a4bf3e560bff12fb50975a55 (diff) |
2.5 Audio:
- Python script to crossfade two sound strips in the sequencer
- Fix for the libsamplerate code producing awful audio when resampling sequencer strips
- Changed default resampler to a linear one (as temporary workaround for a bug that seems to be in the samplerate code)
- Fix for the OpenAL device to return a more accurate playback position
Diffstat (limited to 'intern/audaspace/SRC/AUD_SRCResampleReader.cpp')
-rw-r--r-- | intern/audaspace/SRC/AUD_SRCResampleReader.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/intern/audaspace/SRC/AUD_SRCResampleReader.cpp b/intern/audaspace/SRC/AUD_SRCResampleReader.cpp index 940f4245316..e89857635de 100644 --- a/intern/audaspace/SRC/AUD_SRCResampleReader.cpp +++ b/intern/audaspace/SRC/AUD_SRCResampleReader.cpp @@ -44,6 +44,7 @@ AUD_SRCResampleReader::AUD_SRCResampleReader(AUD_IReader* reader, m_tspecs = specs; m_tspecs.channels = m_sspecs.channels; m_factor = (double)m_tspecs.rate / (double)m_sspecs.rate; + m_position = 0; int error; m_src = src_callback_new(src_callback, @@ -71,7 +72,7 @@ AUD_SRCResampleReader::~AUD_SRCResampleReader() long AUD_SRCResampleReader::doCallback(float** data) { - int length = m_buffer->getSize() / 4 / m_tspecs.channels; + int length = m_buffer->getSize() / AUD_SAMPLE_SIZE(m_tspecs); sample_t* buffer; m_reader->read(length, buffer); @@ -84,6 +85,7 @@ void AUD_SRCResampleReader::seek(int position) { m_reader->seek(position / m_factor); src_reset(m_src); + m_position = position; } int AUD_SRCResampleReader::getLength() @@ -93,7 +95,7 @@ int AUD_SRCResampleReader::getLength() int AUD_SRCResampleReader::getPosition() { - return m_reader->getPosition() * m_factor; + return m_position; } AUD_Specs AUD_SRCResampleReader::getSpecs() @@ -111,4 +113,6 @@ void AUD_SRCResampleReader::read(int & length, sample_t* & buffer) buffer = m_buffer->getBuffer(); length = src_callback_read(m_src, m_factor, length, buffer); + + m_position += length; } |