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:
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