zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit ab3fe78bf57afdec7d4d8f5d585e1ef2c7437b94
parent c080af3808185f6c1f568a90e5fcf30bde1bbab4
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Fri,  1 Jan 2010 14:33:48 -0500

AudioOut: Fixed bufferSize bug

- Issue pointed out on KVR forum that zyn failed to operate when given a low
  Frames/Period on the JACK output
- This was due to a small logic error that caused zyn to waste portions of the
  output buffer when accommodating to the different bufferSize
- Thanks to nexus_VI from KVR for pointing out this issue

Diffstat:
Msrc/Nio/AudioOut.cpp | 22+++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/Nio/AudioOut.cpp b/src/Nio/AudioOut.cpp @@ -59,11 +59,23 @@ void AudioOut::out(Stereo<Sample> smps) pthread_cond_signal(&outBuf_cv); } else if(smps.l().size() > bufferSize) { //store overflow - outBuf.push(Stereo<Sample>(smps.l().subSample(0,bufferSize), - smps.r().subSample(0,bufferSize))); - partialIn = Stereo<Sample>(smps.l().subSample(bufferSize,smps.l().size()), - smps.r().subSample(bufferSize,smps.r().size())); - usePartial = true; + + while(smps.l().size() > bufferSize) { + outBuf.push(Stereo<Sample>(smps.l().subSample(0,bufferSize), + smps.r().subSample(0,bufferSize))); + smps = Stereo<Sample>(smps.l().subSample(bufferSize,smps.l().size()), + smps.r().subSample(bufferSize,smps.r().size())); + } + + if(smps.l().size() == bufferSize) { //no partial + outBuf.push(smps); + usePartial = false; + } + else { //partial + partialIn = smps; + usePartial = true; + } + pthread_cond_signal(&outBuf_cv); } else { //underflow