diff options
Diffstat (limited to 'muse/synti/zynaddsubfx/Misc/Master.C')
-rw-r--r-- | muse/synti/zynaddsubfx/Misc/Master.C | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/muse/synti/zynaddsubfx/Misc/Master.C b/muse/synti/zynaddsubfx/Misc/Master.C index 7d697418..87142c09 100644 --- a/muse/synti/zynaddsubfx/Misc/Master.C +++ b/muse/synti/zynaddsubfx/Misc/Master.C @@ -414,17 +414,18 @@ void Master::AudioOut(REALTYPE* outl, REALTYPE* outr) void Master::GetAudioOutSamples(int nsamples, REALTYPE* outl, REALTYPE* outr) { + int dstOffset = 0; while (nsamples) { - if (ksoundbuffersamples == 0) { + if (ksoundbuffersamples <= 0) { AudioOut(audiooutl, audiooutr); ksoundbuffersamples = SOUND_BUFFER_SIZE; } - int n = nsamples > ksoundbuffersamples ? ksoundbuffersamples : nsamples; - memcpy(outl, audiooutl + SOUND_BUFFER_SIZE - ksoundbuffersamples, - n * sizeof(REALTYPE)); - memcpy(outr, audiooutr + SOUND_BUFFER_SIZE - ksoundbuffersamples, - n * sizeof(REALTYPE)); - nsamples -= n; + int n = nsamples > ksoundbuffersamples ? ksoundbuffersamples : nsamples; + int srcOffset = SOUND_BUFFER_SIZE - ksoundbuffersamples; + memcpy(outl + dstOffset, audiooutl + srcOffset, n * sizeof(REALTYPE)); + memcpy(outr + dstOffset, audiooutr + srcOffset, n * sizeof(REALTYPE)); + nsamples -= n; + dstOffset += n; ksoundbuffersamples -= n; } } |