diff options
author | Tim E. Real <termtech@rogers.com> | 2013-02-02 07:37:31 +0000 |
---|---|---|
committer | Tim E. Real <termtech@rogers.com> | 2013-02-02 07:37:31 +0000 |
commit | f118ed0cfca8ab717b87e1f00459199acba80bb9 (patch) | |
tree | 7a5a46771dcea1a978182d0da0134e6a5d049745 /muse2/muse/midiedit/dcanvas.cpp | |
parent | 5d8ab88bd418da3a4047b38707b5a49f32e912ba (diff) |
Solved: "Old style" Drums: Track channel/port re-enabled, drum list columns default to them.
Required some icon and colour changes. See ChangeLog.
Fixed Old Style Drum lockup: Certain item channel overrides caused infinite loop in Audio::processMidi().
Diffstat (limited to 'muse2/muse/midiedit/dcanvas.cpp')
-rw-r--r-- | muse2/muse/midiedit/dcanvas.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/muse2/muse/midiedit/dcanvas.cpp b/muse2/muse/midiedit/dcanvas.cpp index 300f6927..7984d904 100644 --- a/muse2/muse/midiedit/dcanvas.cpp +++ b/muse2/muse/midiedit/dcanvas.cpp @@ -420,8 +420,23 @@ CItem* DrumCanvas::newItem(int tick, int instrument, int velocity) int port, channel; if(old_style_drummap_mode) { + // Default to track port if -1 and track channel if -1. port = ourDrumMap[instrument].port; + if(port == -1) + { + if(!curPart || !curPart->track() || !curPart->track()->isMidiTrack()) + return 0; + MidiTrack* mt = static_cast<MidiTrack*>(curPart->track()); + port = mt->outPort(); + } channel = ourDrumMap[instrument].channel; + if(channel == -1) + { + if(!curPart || !curPart->track() || !curPart->track()->isMidiTrack()) + return 0; + MidiTrack* mt = static_cast<MidiTrack*>(curPart->track()); + channel = mt->outChannel(); + } } else { @@ -649,8 +664,23 @@ void DrumCanvas::drawMoving(QPainter& p, const CItem* item, const QRect& rect) if (pitch != playedPitch && _playEvents) { keyReleased(playedPitch, true); // kinda backwards but this should pick the right port, stopPlayEvent does not know. if (moving.size() == 1) { + // Default to track port if -1 and track channel if -1. int port = old_style_drummap_mode ? ourDrumMap[instrument].port : dynamic_cast<MidiTrack*>(*instrument_map[instrument].tracks.begin())->outPort(); + if(port == -1) + { + if(!curPart || !curPart->track() || !curPart->track()->isMidiTrack()) + return; + MidiTrack* mt = static_cast<MidiTrack*>(curPart->track()); + port = mt->outPort(); + } int channel = old_style_drummap_mode ? ourDrumMap[instrument].channel : dynamic_cast<MidiTrack*>(*instrument_map[instrument].tracks.begin())->outChannel(); + if(channel == -1) + { + if(!curPart || !curPart->track() || !curPart->track()->isMidiTrack()) + return; + MidiTrack* mt = static_cast<MidiTrack*>(curPart->track()); + channel = mt->outChannel(); + } startPlayEvent(pitch, e.velo(), port, channel); } } @@ -930,8 +960,23 @@ void DrumCanvas::keyPressed(int index, int velocity) return; // called from DList - play event + // Default to track port if -1 and track channel if -1. int port = old_style_drummap_mode ? ourDrumMap[index].port : dynamic_cast<MidiTrack*>(*instrument_map[index].tracks.begin())->outPort(); + if(port == -1) + { + if(!curPart || !curPart->track() || !curPart->track()->isMidiTrack()) + return; + MidiTrack* mt = static_cast<MidiTrack*>(curPart->track()); + port = mt->outPort(); + } int channel = old_style_drummap_mode ? ourDrumMap[index].channel : dynamic_cast<MidiTrack*>(*instrument_map[index].tracks.begin())->outChannel(); + if(channel == -1) + { + if(!curPart || !curPart->track() || !curPart->track()->isMidiTrack()) + return; + MidiTrack* mt = static_cast<MidiTrack*>(curPart->track()); + channel = mt->outChannel(); + } int pitch = old_style_drummap_mode ? ourDrumMap[index].anote : instrument_map[index].pitch; // play note: if(_playEvents) @@ -966,8 +1011,23 @@ void DrumCanvas::keyReleased(int index, bool) return; // called from DList - silence playing event + // Default to track port if -1 and track channel if -1. int port = old_style_drummap_mode ? ourDrumMap[index].port : dynamic_cast<MidiTrack*>(*instrument_map[index].tracks.begin())->outPort(); + if(port == -1) + { + if(!curPart || !curPart->track() || !curPart->track()->isMidiTrack()) + return; + MidiTrack* mt = static_cast<MidiTrack*>(curPart->track()); + port = mt->outPort(); + } int channel = old_style_drummap_mode ? ourDrumMap[index].channel : dynamic_cast<MidiTrack*>(*instrument_map[index].tracks.begin())->outChannel(); + if(channel == -1) + { + if(!curPart || !curPart->track() || !curPart->track()->isMidiTrack()) + return; + MidiTrack* mt = static_cast<MidiTrack*>(curPart->track()); + channel = mt->outChannel(); + } int pitch = old_style_drummap_mode ? ourDrumMap[index].anote : instrument_map[index].pitch; // release note: |