diff --git a/src/effects/EffectUI.cpp b/src/effects/EffectUI.cpp index 68d90349aff5821408546a571c2099019f075f24..fa71dc69a0b8833a4bc9c00d302cd94c3b7a09d7 100644 --- a/src/effects/EffectUI.cpp +++ b/src/effects/EffectUI.cpp @@ -501,6 +501,9 @@ void EffectUIHost::OnPaint(wxPaintEvent & WXUNUSED(evt)) void EffectUIHost::OnClose(wxCloseEvent & WXUNUSED(evt)) { + if (mPlaying) + StopPlayback(); + DoCancel(); CleanupRealtime(); @@ -530,6 +533,9 @@ void EffectUIHost::OnApply(wxCommandEvent & evt) { return; } + + if (mPlaying) + StopPlayback(); // Honor the "select all if none" preference...a little hackish, but whatcha gonna do... if (!mIsBatch && @@ -735,10 +741,7 @@ void EffectUIHost::OnPlay(wxCommandEvent & WXUNUSED(evt)) if (mPlaying) { - auto gAudioIO = AudioIO::Get(); - mPlayPos = gAudioIO->GetStreamTime(); - auto &projectAudioManager = ProjectAudioManager::Get( mProject ); - projectAudioManager.Stop(); + StopPlayback(); } else { @@ -1160,6 +1163,17 @@ void EffectUIHost::CleanupRealtime() } } +void EffectUIHost::StopPlayback() +{ + if (!mPlaying) + return; + + auto gAudioIO = AudioIO::Get(); + mPlayPos = gAudioIO->GetStreamTime(); + auto& projectAudioManager = ProjectAudioManager::Get(mProject); + projectAudioManager.Stop(); +} + DialogFactoryResults EffectUI::DialogFactory(wxWindow &parent, EffectPlugin &host, EffectUIClientInterface &client, EffectSettingsAccess &access) diff --git a/src/effects/EffectUI.h b/src/effects/EffectUI.h index 09463bbdd4070e7649670082477939d77e34a1a7..74968d961ca288e2125903ed38a0a7fd5731611d 100644 --- a/src/effects/EffectUI.h +++ b/src/effects/EffectUI.h @@ -110,6 +110,8 @@ private: void CleanupRealtime(); + void StopPlayback(); + private: Observer::Subscription mAudioIOSubscription, mEffectStateSubscription;