diff --git a/src/sfizz/Wavetables.cpp b/src/sfizz/Wavetables.cpp index cab84574..1e27853b 100644 --- a/src/sfizz/Wavetables.cpp +++ b/src/sfizz/Wavetables.cpp @@ -275,11 +275,36 @@ void WavetableMulti::fillExtra() WavetablePool::WavetablePool() -: waveSin(WavetableMulti::createForHarmonicProfile(HarmonicProfile::getSine(), config::amplitudeSine)) -, waveTriangle(WavetableMulti::createForHarmonicProfile(HarmonicProfile::getTriangle(), config::amplitudeTriangle)) -, waveSaw(WavetableMulti::createForHarmonicProfile(HarmonicProfile::getSaw(), config::amplitudeSaw)) -, waveSquare(WavetableMulti::createForHarmonicProfile(HarmonicProfile::getSquare(), config::amplitudeSquare)) -{ } +{ + getWaveSin(); + getWaveTriangle(); + getWaveSaw(); + getWaveSquare(); +} +const WavetableMulti* WavetablePool::getWaveSin() +{ + static auto wave = WavetableMulti::createForHarmonicProfile( + HarmonicProfile::getSine(), config::amplitudeSine); + return &wave; +} +const WavetableMulti* WavetablePool::getWaveTriangle() +{ + static auto wave = WavetableMulti::createForHarmonicProfile( + HarmonicProfile::getTriangle(), config::amplitudeTriangle); + return &wave; +} +const WavetableMulti* WavetablePool::getWaveSaw() +{ + static auto wave = WavetableMulti::createForHarmonicProfile( + HarmonicProfile::getSaw(), config::amplitudeSaw); + return &wave; +} +const WavetableMulti* WavetablePool::getWaveSquare() +{ + static auto wave = WavetableMulti::createForHarmonicProfile( + HarmonicProfile::getSquare(), config::amplitudeSquare); + return &wave; +} } // namespace sfz diff --git a/src/sfizz/Wavetables.h b/src/sfizz/Wavetables.h index 90bd55f0..6ec7fe12 100644 --- a/src/sfizz/Wavetables.h +++ b/src/sfizz/Wavetables.h @@ -183,20 +183,12 @@ private: * @brief Holds predefined wavetables. * */ -class WavetablePool { -public: +struct WavetablePool { WavetablePool(); - const WavetableMulti* getWaveSin() const { return &waveSin; } - const WavetableMulti* getWaveTriangle() const { return &waveTriangle; } - const WavetableMulti* getWaveSaw() const { return &waveSaw; } - const WavetableMulti* getWaveSquare() const { return &waveSquare; }; -private: - const WavetableMulti waveSin; - const WavetableMulti waveTriangle; - const WavetableMulti waveSaw; - const WavetableMulti waveSquare; - LEAK_DETECTOR(WavetablePool); - + static const WavetableMulti* getWaveSin(); + static const WavetableMulti* getWaveTriangle(); + static const WavetableMulti* getWaveSaw(); + static const WavetableMulti* getWaveSquare(); }; } // namespace sfz