zynaddsubfx

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

commit 66d1f761732d75722d7a9bd48645d06c7edbfcb3
parent 9c54fb7fc21697d3e2dc3728956911cc68de2c1d
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Sun,  1 Oct 2017 15:35:34 -0400

Fix ADnote Test Failure

Ensures FMSmp is only updated once on init

Diffstat:
Msrc/Synth/ADnote.cpp | 10+++++-----
Msrc/Synth/ADnote.h | 2+-
2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/Synth/ADnote.cpp b/src/Synth/ADnote.cpp @@ -77,9 +77,8 @@ ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars, else NoteGlobalPar.Punch.Enabled = 0; - for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) { + for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) setupVoice(nvoice); - } max_unison = 1; for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) @@ -414,7 +413,7 @@ void ADnote::setupVoiceDetune(int nvoice) pars.VoicePar[nvoice].PFMDetune); } -void ADnote::setupVoiceMod(int nvoice) +void ADnote::setupVoiceMod(int nvoice, bool first_run) { auto &param = pars.VoicePar[nvoice]; auto &voice = NoteVoicePar[nvoice]; @@ -444,7 +443,8 @@ void ADnote::setupVoiceMod(int nvoice) voice.FMFreqFixed = param.PFMFixedFreq; //Triggers when a user enables modulation on a running voice - if(voice.FMEnabled != NONE && voice.FMSmp == NULL) { + if(!first_run && voice.FMEnabled != NONE && voice.FMSmp == NULL && voice.FMVoice < 0) { + param.FMSmp->newrandseed(prng()); voice.FMSmp = memory.valloc<float>(synth.oscilsize + OSCIL_SMP_EXTRA_SAMPLES); memset(voice.FMSmp, 0, sizeof(float)*(synth.oscilsize + OSCIL_SMP_EXTRA_SAMPLES)); int vc = nvoice; @@ -1609,7 +1609,7 @@ int ADnote::noteout(float *outl, float *outr) || (NoteVoicePar[nvoice].DelayTicks > 0)) continue; setupVoiceDetune(nvoice); - setupVoiceMod(nvoice); + setupVoiceMod(nvoice, false); } computecurrentparameters(); diff --git a/src/Synth/ADnote.h b/src/Synth/ADnote.h @@ -56,7 +56,7 @@ class ADnote:public SynthNote void setupVoice(int nvoice); int setupVoiceUnison(int nvoice); void setupVoiceDetune(int nvoice); - void setupVoiceMod(int nvoice); + void setupVoiceMod(int nvoice, bool first_run = true); /**Changes the frequency of an oscillator. * @param nvoice voice to run computations on