diff --git a/include/preset_preview_play_handle.h b/include/preset_preview_play_handle.h index 3e4d4e53c..e5185cfbe 100644 --- a/include/preset_preview_play_handle.h +++ b/include/preset_preview_play_handle.h @@ -51,6 +51,8 @@ public: static ConstNotePlayHandleList nphsOfInstrumentTrack( const InstrumentTrack * _ct ); + static bool isPreviewing(); + private: static previewTrackContainer * s_previewTC; diff --git a/plugins/peak_controller_effect/peak_controller_effect.cpp b/plugins/peak_controller_effect/peak_controller_effect.cpp index f9b4049c5..4069c941b 100644 --- a/plugins/peak_controller_effect/peak_controller_effect.cpp +++ b/plugins/peak_controller_effect/peak_controller_effect.cpp @@ -81,6 +81,7 @@ PeakControllerEffect::~PeakControllerEffect() if( idx >= 0 ) { PeakController::s_effects.remove( idx ); + engine::getSong()->removeController( m_autoController ); } } diff --git a/plugins/peak_controller_effect/peak_controller_effect_controls.cpp b/plugins/peak_controller_effect/peak_controller_effect_controls.cpp index eb7e5191d..34ee79a11 100644 --- a/plugins/peak_controller_effect/peak_controller_effect_controls.cpp +++ b/plugins/peak_controller_effect/peak_controller_effect_controls.cpp @@ -29,6 +29,7 @@ #include "PeakController.h" #include "peak_controller_effect_controls.h" #include "peak_controller_effect.h" +#include "preset_preview_play_handle.h" PeakControllerEffectControls:: @@ -66,7 +67,7 @@ void PeakControllerEffectControls::loadSettings( const QDomElement & _this ) } m_effect->m_effectId = effectId; - if( m_effect->m_autoController ) + if( m_effect->m_autoController && presetPreviewPlayHandle::isPreviewing() == false ) { delete m_effect->m_autoController; m_effect->m_autoController = 0; diff --git a/src/core/preset_preview_play_handle.cpp b/src/core/preset_preview_play_handle.cpp index 09139ba21..22ff31a50 100644 --- a/src/core/preset_preview_play_handle.cpp +++ b/src/core/preset_preview_play_handle.cpp @@ -89,12 +89,24 @@ public: m_dataMutex.unlock(); } + bool isPreviewing() + { + bool ret = m_dataMutex.tryLock(); + if( ret == true ) + { + m_dataMutex.unlock(); + } + return ret; + } + private: InstrumentTrack * m_previewInstrumentTrack; notePlayHandle * m_previewNote; QMutex m_dataMutex; + friend class presetPreviewPlayHandle; + } ; @@ -242,3 +254,17 @@ ConstNotePlayHandleList presetPreviewPlayHandle::nphsOfInstrumentTrack( } + + +bool presetPreviewPlayHandle::isPreviewing() +{ + bool ret = s_previewTC->m_dataMutex.tryLock(); + if( ret == true ) + { + s_previewTC->m_dataMutex.unlock(); + } + return ret; +} + + +