zynaddsubfx

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

commit bc4e1cf2993b5807c539e255841ab57a3a67cb38
parent d2764c9ad300d9f83e8012ce1f1b27edd54d67d0
Author: Hans Petter Selasky <hps@selasky.org>
Date:   Fri,  3 Apr 2020 02:15:18 +0200

Don't get oscillator samples in ADnote::legatonote() because
it causes waveform discontinuity when changing pitch and velocity.

Signed-off-by: Hans Petter Selasky <hps@selasky.org>

Diffstat:
Msrc/Synth/ADnote.cpp | 23++---------------------
1 file changed, 2 insertions(+), 21 deletions(-)

diff --git a/src/Synth/ADnote.cpp b/src/Synth/ADnote.cpp @@ -548,9 +548,7 @@ void ADnote::legatonote(LegatoParams lpars) pars.GlobalPar.PDetune); bandwidthDetuneMultiplier = pars.getBandwidthDetuneMultiplier(); - if(pars.GlobalPar.PPanning == 0) { - NoteGlobalPar.Panning = getRandomFloat(); - } else + if(pars.GlobalPar.PPanning) NoteGlobalPar.Panning = pars.GlobalPar.PPanning / 128.0f; NoteGlobalPar.Filter->updateSense(velocity, @@ -597,23 +595,6 @@ void ADnote::legatonote(LegatoParams lpars) pars.VoicePar[nvoice].PFMCoarseDetune, pars.VoicePar[nvoice].PFMDetune); - //Get the voice's oscil or external's voice oscil - int vc = nvoice; - if(pars.VoicePar[nvoice].Pextoscil != -1) - vc = pars.VoicePar[nvoice].Pextoscil; - if(!pars.GlobalPar.Hrandgrouping) - pars.VoicePar[vc].OscilSmp->newrandseed(getRandomUint()); - - pars.VoicePar[vc].OscilSmp->get(NoteVoicePar[nvoice].OscilSmp, - getvoicebasefreq(nvoice), - pars.VoicePar[nvoice].Presonance); //(gf)Modif of the above line. - - //I store the first elements to the last position for speedups - for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; ++i) - NoteVoicePar[nvoice].OscilSmp[synth.oscilsize - + i] = - NoteVoicePar[nvoice].OscilSmp[i]; - auto &voiceFilter = NoteVoicePar[nvoice].Filter; if(voiceFilter) { const auto &vce = pars.VoicePar[nvoice]; @@ -1182,7 +1163,7 @@ void ADnote::computecurrentparameters() FMrelativepitch = NoteVoicePar[nvoice].FMDetune / 100.0f; if(NoteVoicePar[nvoice].FMFreqEnvelope) FMrelativepitch += - NoteVoicePar[nvoice].FMFreqEnvelope->envout() / 100; + NoteVoicePar[nvoice].FMFreqEnvelope->envout() / 100.0f; if (NoteVoicePar[nvoice].FMFreqFixed) FMfreq = powf(2.0f, FMrelativepitch