diff --git a/src/sfizz/Config.h b/src/sfizz/Config.h index a71ad3db..727a125f 100644 --- a/src/sfizz/Config.h +++ b/src/sfizz/Config.h @@ -60,6 +60,7 @@ namespace config { constexpr int filtersInPool { maxVoices * 2 }; constexpr int filtersPerVoice { 2 }; constexpr int eqsPerVoice { 3 }; + constexpr int oscillatorsPerVoice { 9 }; constexpr float noiseVariance { 0.25f }; /** Minimum interval in frames between recomputations of coefficients of the diff --git a/src/sfizz/Defaults.h b/src/sfizz/Defaults.h index 2066cb19..158da597 100644 --- a/src/sfizz/Defaults.h +++ b/src/sfizz/Defaults.h @@ -64,7 +64,7 @@ namespace Default constexpr float oscillatorPhase { 0.0 }; constexpr Range oscillatorPhaseRange { -1.0, 360.0 }; constexpr int oscillatorMulti { 1 }; - constexpr Range oscillatorMultiRange { 1, 9 }; + constexpr Range oscillatorMultiRange { 1, config::oscillatorsPerVoice }; constexpr float oscillatorDetune { 0 }; constexpr Range oscillatorDetuneRange { -9600, 9600 }; diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index 4a9c6c76..251a1167 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -666,7 +666,7 @@ void sfz::Voice::setupOscillatorUnison() waveUnisonSize = m; // detune (cents) - float detunes[maxWaveOscillators]; + float detunes[config::oscillatorsPerVoice]; detunes[0] = 0.0; detunes[1] = -d; detunes[2] = +d; @@ -703,5 +703,3 @@ void sfz::Voice::setupOscillatorUnison() } #endif } - -constexpr unsigned sfz::Voice::maxWaveOscillators; diff --git a/src/sfizz/Voice.h b/src/sfizz/Voice.h index afde9b53..1723c416 100644 --- a/src/sfizz/Voice.h +++ b/src/sfizz/Voice.h @@ -288,15 +288,13 @@ private: ADSREnvelope egEnvelope; float bendStepFactor { centsFactor(1) }; - static constexpr unsigned maxWaveOscillators = Default::oscillatorMultiRange.getEnd(); - - WavetableOscillator waveOscillators[maxWaveOscillators]; + WavetableOscillator waveOscillators[config::oscillatorsPerVoice]; // unison of oscillators unsigned waveUnisonSize { 0 }; - float waveDetuneRatio[maxWaveOscillators] { }; - float waveLeftGain[maxWaveOscillators] { }; - float waveRightGain[maxWaveOscillators] { }; + float waveDetuneRatio[config::oscillatorsPerVoice] { }; + float waveLeftGain[config::oscillatorsPerVoice] { }; + float waveRightGain[config::oscillatorsPerVoice] { }; Duration dataDuration; Duration amplitudeDuration;