# HG changeset patch # User lbajardsilogic # Date 1190016443 0 # Node ID 71e5f393b7273a253ca8530436e6be11c88fa5c7 # Parent 6249d87b37806f0ccf5703363dbde32dcb579bc7 debugging TimeStretchFilter - adding safety margin to buffers diff -r 6249d87b3780 -r 71e5f393b727 sv/audioio/AudioCallbackPlaySource.cpp --- 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 *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) diff -r 6249d87b3780 -r 71e5f393b727 sv/filter/TimeStretchFilter.cpp --- 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 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