From f39b3d50224dcf92ec065a9d05bd39b34396a827 Mon Sep 17 00:00:00 2001 From: Kevin Zander Date: Fri, 8 Jul 2022 13:06:25 -0500 Subject: [PATCH] Use automation track for MIDI program change events (#6308) --- plugins/MidiImport/MidiImport.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/plugins/MidiImport/MidiImport.cpp b/plugins/MidiImport/MidiImport.cpp index 282bfa03b..1c8851a31 100644 --- a/plugins/MidiImport/MidiImport.cpp +++ b/plugins/MidiImport/MidiImport.cpp @@ -319,6 +319,9 @@ bool MidiImport::readSMF( TrackContainer* tc ) // 128 CC + Pitch Bend smfMidiCC ccs[MIDI_CC_COUNT]; + // channel to CC object for program changes + std::unordered_map pcs; + // channels can be set out of 256 range // using unordered_map should fix most invalid loads and crashes while loading std::unordered_map chs; @@ -467,8 +470,12 @@ bool MidiImport::readSMF( TrackContainer* tc ) long prog = evt->get_integer_value(); if( ch->isSF2 ) { - ch->it_inst->childModel( "bank" )->setValue( 0 ); - ch->it_inst->childModel( "patch" )->setValue( prog ); + auto& pc = pcs[evt->chan]; + AutomatableModel* objModel = ch->it_inst->childModel("patch"); + if (pc.at == nullptr) { + pc.create(tc, trackName + " > " + objModel->displayName()); + } + pc.putValue(time, objModel, prog); } else { const QString num = QString::number( prog );