diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 01703a93..3fb00c90 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -46,6 +46,19 @@ sfz::Synth::Synth(int numVoices) resetVoices(numVoices); } +sfz::Synth::~Synth() +{ + AtomicDisabler callbackDisabler { canEnterCallback }; + while (inCallback) { + std::this_thread::sleep_for(1ms); + } + + for (auto& voice: voices) + voice->reset(); + + resources.filePool.emptyFileLoadingQueues(); +} + void sfz::Synth::callback(absl::string_view header, const std::vector& members) { switch (hash(header)) { diff --git a/src/sfizz/Synth.h b/src/sfizz/Synth.h index 86159f93..9aa8b6d9 100644 --- a/src/sfizz/Synth.h +++ b/src/sfizz/Synth.h @@ -82,6 +82,10 @@ public: * */ Synth(); + /** + * @brief Destructor + */ + ~Synth(); /** * @brief Construct a new Synth object with a specified number of voices. *