Mercurial > hg > easaier-soundaccess
changeset 110:71e5f393b727
debugging TimeStretchFilter - adding safety margin to buffers
author | lbajardsilogic |
---|---|
date | Mon, 17 Sep 2007 08:07:23 +0000 |
parents | 6249d87b3780 |
children | 9cd248a25b74 |
files | sv/audioio/AudioCallbackPlaySource.cpp sv/filter/TimeStretchFilter.cpp |
diffstat | 2 files changed, 30 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/sv/audioio/AudioCallbackPlaySource.cpp Fri Sep 14 16:50:30 2007 +0000 +++ b/sv/audioio/AudioCallbackPlaySource.cpp Mon Sep 17 08:07:23 2007 +0000 @@ -33,7 +33,8 @@ //#define DEBUG_AUDIO_PLAY_SOURCE 1 //#define DEBUG_AUDIO_PLAY_SOURCE_PLAYING 1 -const size_t AudioCallbackPlaySource::m_ringBufferSize = 131071; +//const size_t AudioCallbackPlaySource::m_ringBufferSize = 131071; +const size_t AudioCallbackPlaySource::m_ringBufferSize = 1764000; AudioCallbackPlaySource::AudioCallbackPlaySource(ViewManager *manager) : m_viewManager(manager), @@ -1558,6 +1559,20 @@ { ib[c] = (float*) malloc(required*sizeof(float)); RingBuffer<float> *rb = getReadRingBuffer(c); + if (!rb) { + std::cerr << "WARNING: AudioCallbackPlaySource::applyRealTimeFilters: " + << "No ring buffer available for channel " << c + << ", returning no data here" << std::endl; + return; + } + size_t rs = rb->getReadSpace(); + if (rs < required) { + std::cerr << "WARNING: AudioCallbackPlaySource::applyRealTimeFilters: " + << "Ring buffer for channel " << c << " has only " + << rs << " (of " << got << ") samples available, " + << "exit" << std::endl; + return; + } if (rb) { size_t gotHere = rb->peek(ib[c], got); if (gotHere < got)
--- a/sv/filter/TimeStretchFilter.cpp Fri Sep 14 16:50:30 2007 +0000 +++ b/sv/filter/TimeStretchFilter.cpp Mon Sep 17 08:07:23 2007 +0000 @@ -61,7 +61,7 @@ { m_hop = m_framesize/4; - m_inputBuffer = (float *)calloc(((m_framesize-1)*2 + 1 + m_hop), sizeof(float)); + m_inputBuffer = (float *)calloc(m_framesize*3, sizeof(float)); /**********malloc***********/ FFTframe=(float *)calloc((m_framesize), sizeof(float)); @@ -232,6 +232,12 @@ } else if (name == "Peaklock"){ m_peakcheck = (value > 0) ? true : false; } +#ifdef DEBUG_FILTERS + std::cerr << "TimeStretchFilter::hopfactor = " << hopfactor << std::endl; + std::cerr << "TimeStretchFilter::m_interpfactor = " << m_interpfactor << std::endl; + std::cerr << "TimeStretchFilter::m_hop = " << m_hop << std::endl; + std::cerr << "TimeStretchFilter::skip = " << getRequiredSkipSamples() << std::endl; +#endif } @@ -247,7 +253,7 @@ int currentposition = m_hop; - if (samples < floor((m_framesize-1)*m_interpfactor + 1 + m_hop)) + if ( samples < floor(m_framesize*(m_interpfactor + 1)) ) return; int channel = getSourceChannelCount(); @@ -370,16 +376,17 @@ int channel = getSourceChannelCount(); - for (int i=0; i<samples; i++){ - output[0][i] = outbuffer[i]; - if (channel > 1) - output[1][i] = outbuffer[i]; + for (size_t ch = 0; ch < channel; ++ch) + { + for (size_t i = 0; i < samples; ++i) { + output[ch][i] = outbuffer[i]; + } } } size_t TimeStretchFilter::getRequiredInputSamples(size_t outputSamplesNeeded) { - size_t need = floor((m_framesize-1)*m_interpfactor + 1 + m_hop); + size_t need = floor(m_framesize*(m_interpfactor + 1)); return need; } @@ -395,6 +402,5 @@ { skip = m_hop; } - return skip; } \ No newline at end of file