diff --git a/src/sfizz/Wavetables.cpp b/src/sfizz/Wavetables.cpp index 34b1e46a..c9d72362 100644 --- a/src/sfizz/Wavetables.cpp +++ b/src/sfizz/Wavetables.cpp @@ -11,12 +11,10 @@ namespace sfz { -static WavetableMulti silenceMulti = WavetableMulti::createSilence(); - void WavetableOscillator::init(double sampleRate) { _sampleInterval = 1.0 / sampleRate; - _multi = &silenceMulti; + _multi = WavetableMulti::getSilenceWavetable(); clear(); } @@ -27,7 +25,7 @@ void WavetableOscillator::clear() void WavetableOscillator::setWavetable(const WavetableMulti* wave) { - _multi = wave ? wave : &silenceMulti; + _multi = wave ? wave : WavetableMulti::getSilenceWavetable(); } void WavetableOscillator::setPhase(float phase) @@ -252,12 +250,12 @@ WavetableMulti WavetableMulti::createForHarmonicProfile( return wm; } -WavetableMulti WavetableMulti::createSilence() +WavetableMulti* WavetableMulti::getSilenceWavetable() { - WavetableMulti wm; + static WavetableMulti wm; wm.allocateStorage(1); wm.fillExtra(); - return wm; + return &wm; } void WavetableMulti::allocateStorage(unsigned tableSize) diff --git a/src/sfizz/Wavetables.h b/src/sfizz/Wavetables.h index 5bed0896..c8aca0f6 100644 --- a/src/sfizz/Wavetables.h +++ b/src/sfizz/Wavetables.h @@ -159,8 +159,8 @@ public: static WavetableMulti createForHarmonicProfile( const HarmonicProfile& hp, double amplitude, unsigned tableSize = config::tableSize, double refSampleRate = 44100.0); - // create the tiniest wavetable with null content for use with oscillators - static WavetableMulti createSilence(); + // get a tiny silent wavetable with null content for use with oscillators + static WavetableMulti* getSilenceWavetable(); private: // get a pointer to the beginning of the N-th table