The MIDI events are being filtered on output in this code:
Code: Select all
void MidiPort::processOutEvent( const MidiEvent& event, const MidiTime& time )
{
// mask event
if( isOutputEnabled() && realOutputChannel() == event.channel() )
{
MidiEvent outEvent = event;
if( fixedOutputVelocity() >= 0 && event.velocity() > 0 &&
( event.type() == MidiNoteOn || event.type() == MidiKeyPressure ) )
{
outEvent.setVelocity( fixedOutputVelocity() );
}
m_midiClient->processOutEvent( outEvent, time, this );
}
}
However, my expectation is that events from any channel are accepted (since I configured the input to accept input from all channels) and that any accepted MIDI events are simply moved to the correct output channel.
So I was able to make it work the way that I expect by doing this:
Code: Select all
@@ -146,10 +146,12 @@ void MidiPort::processInEvent( const MidiEvent& event, const MidiTime& time )
void MidiPort::processOutEvent( const MidiEvent& event, const MidiTime& time )
{
// mask event
- if( isOutputEnabled() && realOutputChannel() == event.channel() )
+ if( isOutputEnabled())
{
MidiEvent outEvent = event;
+ outEvent.setChannel(realOutputChannel());
+
if( fixedOutputVelocity() >= 0 && event.velocity() > 0 &&
( event.type() == MidiNoteOn || event.type() == MidiKeyPressure ) )
{