From 76f6b1863276fc956d79ceb547440da813b10832 Mon Sep 17 00:00:00 2001 From: Fastigium Date: Thu, 18 Feb 2016 20:27:44 +0100 Subject: [PATCH] Drop PresetPreviewPlayHandle's shared buffer system Instead, add the NotePlayHandle used for previewing directly to the mixer. This fixes two preview problems, namely the shared buffer being released by the NotePlayHandle but still being pulled in by the AudioPort resulting in distortions, and certain previews being cut off at mouse release even if a release was set in the envelope. --- src/core/PresetPreviewPlayHandle.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/core/PresetPreviewPlayHandle.cpp b/src/core/PresetPreviewPlayHandle.cpp index 4b8b49970..633f03a3f 100644 --- a/src/core/PresetPreviewPlayHandle.cpp +++ b/src/core/PresetPreviewPlayHandle.cpp @@ -118,6 +118,8 @@ PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file, { s_previewTC->lockData(); + setUsesBuffer( false ); + if( s_previewTC->previewNote() != NULL ) { s_previewTC->previewNote()->mute(); @@ -185,6 +187,8 @@ PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file, s_previewTC->setPreviewNote( m_previewNote ); + Engine::mixer()->addPlayHandle( m_previewNote ); + s_previewTC->unlockData(); Engine::projectJournal()->setJournalling( j ); } @@ -201,7 +205,7 @@ PresetPreviewPlayHandle::~PresetPreviewPlayHandle() // then set according state s_previewTC->setPreviewNote( NULL ); } - NotePlayHandleManager::release( m_previewNote ); + m_previewNote->noteOff(); s_previewTC->unlockData(); } @@ -210,7 +214,8 @@ PresetPreviewPlayHandle::~PresetPreviewPlayHandle() void PresetPreviewPlayHandle::play( sampleFrame * _working_buffer ) { - m_previewNote->play( _working_buffer ); + // Do nothing; the preview instrument is played by m_previewNote, which + // has been added to the mixer }