From 99efe8aef32dc8033efb4e78110582ecf6d67da9 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Sun, 13 Jan 2013 18:48:35 +0100 Subject: [PATCH] LocalZynAddSubFx: include/forward MIDI channel information When sending MIDI events to the ZynAddSubFX engine do not statically send them on channel 0 but on the MIDI channel which is set as output MIDI channel of the instrument track. This adds some flexibility when it comes to multipart ZynAddSubFX presets which are connected to different MIDI channels. --- plugins/zynaddsubfx/LocalZynAddSubFx.cpp | 12 ++++++------ plugins/zynaddsubfx/ZynAddSubFx.cpp | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/zynaddsubfx/LocalZynAddSubFx.cpp b/plugins/zynaddsubfx/LocalZynAddSubFx.cpp index bd270816f..24e4ff182 100644 --- a/plugins/zynaddsubfx/LocalZynAddSubFx.cpp +++ b/plugins/zynaddsubfx/LocalZynAddSubFx.cpp @@ -1,7 +1,7 @@ /* * LocalZynAddSubFx.cpp - local implementation of ZynAddSubFx plugin * - * Copyright (c) 2009-2010 Tobias Doerffel + * Copyright (c) 2009-2013 Tobias Doerffel * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * @@ -206,10 +206,10 @@ void LocalZynAddSubFx::processMidiEvent( const midiEvent & _e ) } if( m_runningNotes[_e.key()] > 0 ) { - m_master->NoteOff( 0, _e.key() ); + m_master->NoteOff( _e.channel(), _e.key() ); } ++m_runningNotes[_e.key()]; - m_master->NoteOn( 0, _e.key(), _e.velocity() ); + m_master->NoteOn( _e.channel(), _e.key(), _e.velocity() ); break; } case MidiNoteOff: @@ -219,16 +219,16 @@ void LocalZynAddSubFx::processMidiEvent( const midiEvent & _e ) } if( --m_runningNotes[_e.key()] <= 0 ) { - m_master->NoteOff( 0, _e.key() ); + m_master->NoteOff( _e.channel(), _e.key() ); } break; case MidiPitchBend: - m_master->SetController( 0, C_pitchwheel, + m_master->SetController( _e.channel(), C_pitchwheel, _e.m_data.m_param[0] + _e.m_data.m_param[1]*128-8192 ); break; case MidiControlChange: - m_master->SetController( 0, + m_master->SetController( _e.channel(), midiIn.getcontroller( _e.m_data.m_param[0] ), _e.m_data.m_param[1] ); break; diff --git a/plugins/zynaddsubfx/ZynAddSubFx.cpp b/plugins/zynaddsubfx/ZynAddSubFx.cpp index f1483c19b..5ad842a00 100644 --- a/plugins/zynaddsubfx/ZynAddSubFx.cpp +++ b/plugins/zynaddsubfx/ZynAddSubFx.cpp @@ -1,7 +1,7 @@ /* * ZynAddSubFx.cpp - ZynAddSubxFX-embedding plugin * - * Copyright (c) 2008-2010 Tobias Doerffel + * Copyright (c) 2008-2013 Tobias Doerffel * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * @@ -450,7 +450,7 @@ void ZynAddSubFxInstrument::initPlugin() void ZynAddSubFxInstrument::sendControlChange( MidiControllers midiCtl, float value ) { - handleMidiEvent( midiEvent( MidiControlChange, 0, midiCtl, (int) value, this ), + handleMidiEvent( midiEvent( MidiControlChange, instrumentTrack()->midiPort()->realOutputChannel(), midiCtl, (int) value, this ), midiTime() ); }