commit 0a4e5a4de8c7502062ba143474d9f29e31650f5c
parent 457d2cc078a4c2b2ab9b48823ac0b4c2be95f217
Author: fundamental <mark.d.mccurry@gmail.com>
Date: Sun, 6 Oct 2019 21:54:40 -0400
Apply fix to pad synth prepare() data race
Prepares the shared oscillator before using multiple threads to
generate pad synth wavetables.
Patch by friedolino
Diffstat:
3 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/Params/PADnoteParameters.cpp b/src/Params/PADnoteParameters.cpp
@@ -971,6 +971,9 @@ int PADnoteParameters::sampleGenerator(PADnoteParameters::callback cb,
delete[] spectrum;
};
+ if(oscilgen->needPrepare())
+ oscilgen->prepare();
+
#ifdef WIN32
//Temporarily disable multi-threading here as C++11 threads are broken on
//mingw cross compilation
diff --git a/src/Synth/ADnote.cpp b/src/Synth/ADnote.cpp
@@ -32,8 +32,8 @@ namespace zyn {
ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars,
WatchManager *wm, const char *prefix)
- :SynthNote(spars), pars(*pars_), watch_be4_add(wm, prefix, "noteout/be4_mix"), watch_after_add(wm,prefix,"noteout/after_mix"),
- watch_punch(wm, prefix, "noteout/punch"), watch_legato(wm, prefix, "noteout/legato")
+ :SynthNote(spars), watch_be4_add(wm, prefix, "noteout/be4_mix"), watch_after_add(wm,prefix,"noteout/after_mix"),
+ watch_punch(wm, prefix, "noteout/punch"), watch_legato(wm, prefix, "noteout/legato"), pars(*pars_)
{
memory.beginTransaction();
tmpwavel = memory.valloc<float>(synth.buffersize);
diff --git a/src/Synth/PADnote.cpp b/src/Synth/PADnote.cpp
@@ -28,9 +28,10 @@ namespace zyn {
PADnote::PADnote(const PADnoteParameters *parameters,
SynthParams pars, const int& interpolation, WatchManager *wm,
const char *prefix)
- :SynthNote(pars), pars(*parameters), interpolation(interpolation),
+ :SynthNote(pars),
watch_int(wm, prefix, "noteout/after_interpolation"), watch_punch(wm, prefix, "noteout/after_punch"),
- watch_amp_int(wm, prefix, "noteout/after_amp_interpolation"), watch_legato(wm, prefix, "noteout/after_legato")
+ watch_amp_int(wm, prefix, "noteout/after_amp_interpolation"), watch_legato(wm, prefix, "noteout/after_legato"),
+ pars(*parameters),interpolation(interpolation)
{
NoteGlobalPar.GlobalFilter = nullptr;
NoteGlobalPar.FilterEnvelope = nullptr;