# HG changeset patch # User Chris Cannam # Date 1427215298 0 # Node ID 88ae0e53a5da2fdab673fb1f3921c2d57071ca7a # Parent aa6fb3516e281bae6f9f57f368427374b9138b05 Reset audio generator when clearing ring buffers -- because we are about to jump back in time to the start of the buffered area, so any pending note-offs won't happen until much later, so we should drop the pending notes entirely diff -r aa6fb3516e28 -r 88ae0e53a5da audioio/AudioCallbackPlaySource.cpp --- a/audioio/AudioCallbackPlaySource.cpp Mon Mar 23 11:26:28 2015 +0000 +++ b/audioio/AudioCallbackPlaySource.cpp Tue Mar 24 16:41:38 2015 +0000 @@ -388,6 +388,8 @@ m_writeBuffers->push_back(new RingBuffer(m_ringBufferSize)); } + m_audioGenerator->reset(); + // cout << "AudioCallbackPlaySource::clearRingBuffers: Created " // << count << " write buffers" << endl; diff -r aa6fb3516e28 -r 88ae0e53a5da audioio/AudioGenerator.cpp --- a/audioio/AudioGenerator.cpp Mon Mar 23 11:26:28 2015 +0000 +++ b/audioio/AudioGenerator.cpp Tue Mar 24 16:41:38 2015 +0000 @@ -526,8 +526,9 @@ sv_frame_t got = blocks * m_processingBlockSize; #ifdef DEBUG_AUDIO_GENERATOR - cout << "mixModel [clip]: frames " << frames - << ", blocks " << blocks << endl; + cout << "mixModel [clip]: start " << startFrame << ", frames " << frames + << ", blocks " << blocks << ", have " << m_noteOffs.size() + << " note-offs" << endl; #endif ClipMixer::NoteStart on; diff -r aa6fb3516e28 -r 88ae0e53a5da audioio/ClipMixer.cpp --- a/audioio/ClipMixer.cpp Mon Mar 23 11:26:28 2015 +0000 +++ b/audioio/ClipMixer.cpp Tue Mar 24 16:41:38 2015 +0000 @@ -20,6 +20,8 @@ #include "base/Debug.h" +//#define DEBUG_CLIP_MIXER 1 + ClipMixer::ClipMixer(int channels, sv_samplerate_t sampleRate, sv_frame_t blockSize) : m_channels(channels), m_sampleRate(sampleRate),