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 | |
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')
-rw-r--r-- | muse2/muse/midiedit/dcanvas.cpp | 60 | ||||
-rw-r--r-- | muse2/muse/midiedit/dlist.cpp | 80 | ||||
-rw-r--r-- | muse2/muse/midiedit/drumedit.cpp | 8 | ||||
-rw-r--r-- | muse2/muse/midiedit/drummap.cpp | 286 | ||||
-rw-r--r-- | muse2/muse/midiedit/drummap.h | 4 |
5 files changed, 276 insertions, 162 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: diff --git a/muse2/muse/midiedit/dlist.cpp b/muse2/muse/midiedit/dlist.cpp index de89834f..a8555cc9 100644 --- a/muse2/muse/midiedit/dlist.cpp +++ b/muse2/muse/midiedit/dlist.cpp @@ -30,6 +30,7 @@ #include <stdio.h> #include "globals.h" +#include "globaldefs.h" #include "app.h" #include "audio.h" #include "pitchedit.h" @@ -178,8 +179,14 @@ void DList::draw(QPainter& p, const QRect& rect) if(old_style_drummap_mode) { - int channel = dm->channel; - MusECore::MidiPort* mp = &MusEGlobal::midiPorts[dm->port]; + // Default to track port if -1 and track channel if -1. + int channel = dm->channel; + if(channel == -1) + channel = cur_channel; + int mport = dm->port; + if(mport == -1) + mport = cur_track->outPort(); + MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mport]; int instr_pitch = dm->anote; MusECore::MidiCtrlValListList* cll = mp->controller(); const int min = channel << 24; @@ -351,11 +358,15 @@ void DList::draw(QPainter& p, const QRect& rect) p.drawText(r.x() + 8, r.y(), r.width() - 8, r.height(), align, str); } break; + + // Default to track port if -1 and track channel if -1. case COL_OUTCHANNEL: - s.setNum(dm->channel+1); + if(dm->channel != -1) + s.setNum(dm->channel+1); break; case COL_OUTPORT: - s.sprintf("%d:%s", dm->port+1, MusEGlobal::midiPorts[dm->port].portname().toLatin1().constData()); + if(dm->port != -1) + s.sprintf("%d:%s", dm->port+1, MusEGlobal::midiPorts[dm->port].portname().toLatin1().constData()); align = Qt::AlignVCenter | Qt::AlignLeft; break; } @@ -411,7 +422,7 @@ void DList::devicesPopupMenu(MusECore::DrumMap* t, int x, int y, bool changeAll) return; } - QMenu* p = MusECore::midiPortsPopup(this, t->port); + QMenu* p = MusECore::midiPortsPopup(this, t->port, true); // Include a "<Default>" entry. QAction* act = p->exec(mapToGlobal(QPoint(x, y)), 0); bool doemit = false; if(!act) @@ -423,23 +434,41 @@ void DList::devicesPopupMenu(MusECore::DrumMap* t, int x, int y, bool changeAll) int n = act->data().toInt(); delete p; - if(n < 0) // Invalid item. + const int openConfigId = MIDI_PORTS; + const int defaultId = MIDI_PORTS + 1; + + if(n < 0 || n > defaultId) // Invalid item. return; - - if(n >= MIDI_PORTS) // Show port config dialog. + + if(n == openConfigId) // Show port config dialog. { MusEGlobal::muse->configMidiPorts(); return; } - + + if(n == defaultId) // Means the <default> -1 + n = -1; + if (!changeAll) { if(n != t->port) { + int mport = n; + // Default to track port if -1 and track channel if -1. + if(mport == -1) + { + if(!dcanvas || !dcanvas->part()) + return; + MusECore::Part* cur_part = dcanvas->part(); + if(!cur_part->track() || !cur_part->track()->isMidiTrack()) + return; + MusECore::MidiTrack* cur_track = static_cast<MusECore::MidiTrack*>(cur_part->track()); + mport = cur_track->outPort(); + } MusEGlobal::audio->msgIdle(true); - MusEGlobal::song->remapPortDrumCtrlEvents(getSelectedInstrument(), -1, -1, n); + MusEGlobal::song->remapPortDrumCtrlEvents(getSelectedInstrument(), -1, -1, mport); MusEGlobal::audio->msgIdle(false); - t->port = n; + t->port = n; // -1 is allowed doemit = true; } } @@ -631,8 +660,9 @@ void DList::viewMousePressEvent(QMouseEvent* ev) break; case COL_OUTCHANNEL: // this column isn't visible in new style drum mode val = dm->channel + incVal; - if (val < 0) - val = 0; + // Default to track port if -1 and track channel if -1. + if (val < -1) + val = -1; else if (val > 127) val = 127; @@ -653,7 +683,11 @@ void DList::viewMousePressEvent(QMouseEvent* ev) if(val != dm->channel) { MusEGlobal::audio->msgIdle(true); - MusEGlobal::song->remapPortDrumCtrlEvents(instrument, -1, val, -1); + int mchan = val; + if(mchan == -1 && dcanvas && dcanvas->part() && dcanvas->part()->track() && dcanvas->part()->track()->isMidiTrack()) + mchan = static_cast<MusECore::MidiTrack*>(dcanvas->part()->track())->outChannel(); + if(val != -1) + MusEGlobal::song->remapPortDrumCtrlEvents(instrument, -1, val, -1); MusEGlobal::audio->msgIdle(false); dm->channel = val; MusEGlobal::song->update(SC_DRUMMAP); @@ -836,7 +870,9 @@ void DList::lineEdit(int line, int section) break; case COL_OUTCHANNEL: - editor->setText(QString::number(dm->channel+1)); + // Default to track port if -1 and track channel if -1. + if(dm->channel != -1) + editor->setText(QString::number(dm->channel+1)); break; } @@ -970,11 +1006,13 @@ void DList::returnPressed() break; case COL_OUTCHANNEL: - val--; - if (val >= 16) - val = 15; - if (val < 0) - val = 0; + // Default to track port if -1 and track channel if -1. + if(val <= 0) + val = -1; + else + val--; + if (val >= MIDI_CHANNELS) + val = MIDI_CHANNELS - 1; break; default: break; @@ -1016,7 +1054,7 @@ void DList::returnPressed() break; case COL_OUTCHANNEL: - editEntry->channel = val; + editEntry->channel = val; break; default: diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp index c64641e9..fd28d8ea 100644 --- a/muse2/muse/midiedit/drumedit.cpp +++ b/muse2/muse/midiedit/drumedit.cpp @@ -96,8 +96,8 @@ void DrumEdit::setHeaderWhatsThis() header->setWhatsThis(COL_INPUTTRIGGER, tr("this input note triggers the sound")); header->setWhatsThis(COL_NOTELENGTH, tr("note length")); header->setWhatsThis(COL_NOTE, tr("this is the note which is played")); - header->setWhatsThis(COL_OUTCHANNEL, tr("output channel (hold ctl to affect all rows)")); - header->setWhatsThis(COL_OUTPORT, tr("output port (hold ctl to affect all rows)")); + header->setWhatsThis(COL_OUTCHANNEL, tr("override track output channel (hold ctl to affect all rows)")); + header->setWhatsThis(COL_OUTPORT, tr("override track output port (hold ctl to affect all rows)")); header->setWhatsThis(COL_LEVEL1, tr("shift + control key: draw velocity level 1")); header->setWhatsThis(COL_LEVEL2, tr("control key: draw velocity level 2")); header->setWhatsThis(COL_LEVEL3, tr("shift key: draw velocity level 3")); @@ -118,8 +118,8 @@ void DrumEdit::setHeaderToolTips() header->setToolTip(COL_INPUTTRIGGER, tr("this input note triggers the sound")); header->setToolTip(COL_NOTELENGTH, tr("note length")); header->setToolTip(COL_NOTE, tr("this is the note which is played")); - header->setToolTip(COL_OUTCHANNEL, tr("output channel (ctl: affect all rows)")); - header->setToolTip(COL_OUTPORT, tr("output port (ctl: affect all rows)")); + header->setToolTip(COL_OUTCHANNEL, tr("override track output channel (ctl: affect all rows)")); + header->setToolTip(COL_OUTPORT, tr("override track output port (ctl: affect all rows)")); header->setToolTip(COL_LEVEL1, tr("shift + control key: draw velocity level 1")); header->setToolTip(COL_LEVEL2, tr("control key: draw velocity level 2")); header->setToolTip(COL_LEVEL3, tr("shift key: draw velocity level 3")); diff --git a/muse2/muse/midiedit/drummap.cpp b/muse2/muse/midiedit/drummap.cpp index 477b2f9d..6853a3e5 100644 --- a/muse2/muse/midiedit/drummap.cpp +++ b/muse2/muse/midiedit/drummap.cpp @@ -41,7 +41,8 @@ namespace MusECore { // GM default drum map //--------------------------------------------------------- -const DrumMap blankdm = { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 127, 127, false }; +// Default to track port if -1 and track channel if -1. (These used to say 9, 0 for chan, port). +const DrumMap blankdm = { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 127, 127, false }; // this map should have 128 entries, as it's used for initalising iNewDrumMap as well. // iNewDrumMap only has 128 entries. also, the every "out-note" ("anote") should be @@ -51,141 +52,141 @@ const DrumMap blankdm = { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 127, // iNewDrumMap[ idrumMap[i].anote ] = idrumMap[i] // if you ever want to change this, you will need to fix the initNewDrumMap() function. const DrumMap idrumMap[DRUM_MAPSIZE] = { - { QString("Acoustic Bass Drum"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 35, 35, false }, - { QString("Bass Drum 1"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 36, 36, false }, - { QString("Side Stick"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 37, 37, false }, - { QString("Acoustic Snare"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 38, 38, false }, - { QString("Hand Clap"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 39, 39, false }, - { QString("Electric Snare"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 40, 40, false }, - { QString("Low Floor Tom"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 41, 41, false }, - { QString("Closed Hi-Hat"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 42, 42, false }, - { QString("High Floor Tom"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 43, 43, false }, - { QString("Pedal Hi-Hat"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 44, 44, false }, - { QString("Low Tom"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 45, 45, false }, - { QString("Open Hi-Hat"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 46, 46, false }, - { QString("Low-Mid Tom"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 47, 47, false }, - { QString("Hi-Mid Tom"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 48, 48, false }, - { QString("Crash Cymbal 1"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 49, 49, false }, - { QString("High Tom"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 50, 50, false }, - - { QString("Ride Cymbal 1"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 51, 51, false }, - { QString("Chinese Cymbal"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 52, 52, false }, - { QString("Ride Bell"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 53, 53, false }, - { QString("Tambourine"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 54, 54, false }, - { QString("Splash Cymbal"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 55, 55, false }, - { QString("Cowbell"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 56, 56, false }, - { QString("Crash Cymbal 2"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 57, 57, false }, - { QString("Vibraslap"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 58, 58, false }, - { QString("Ride Cymbal 2"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 59, 59, false }, - { QString("Hi Bongo"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 60, 60, false }, - { QString("Low Bongo"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 61, 61, false }, - { QString("Mute Hi Conga"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 62, 62, false }, - { QString("Open Hi Conga"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 63, 63, false }, - { QString("Low Conga"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 64, 64, false }, - { QString("High Timbale"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 65, 65, false }, - { QString("Low Timbale"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 66, 66, false }, - - { QString("High Agogo"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 67, 67, false }, - { QString("Low Agogo"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 68, 68, false }, - { QString("Cabasa"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 69, 69, false }, - { QString("Maracas"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 70, 70, false }, - { QString("Short Whistle"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 71, 71, false }, - { QString("Long Whistle"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 72, 72, false }, - { QString("Short Guiro"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 73, 73, false }, - { QString("Long Guiro"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 74, 74, false }, - { QString("Claves"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 75, 75, false }, - { QString("Hi Wood Block"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 76, 76, false }, - { QString("Low Wood Block"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 77, 77, false }, - { QString("Mute Cuica"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 78, 78, false }, - { QString("Open Cuica"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 79, 79, false }, - { QString("Mute Triangle"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 80, 80, false }, - { QString("Open Triangle"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 81, 81, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 82, 82, false }, - - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 83, 83, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 84, 84, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 85, 85, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 86, 86, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 87, 87, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 88, 88, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 89, 89, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 90, 90, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 91, 91, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 92, 92, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 93, 93, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 94, 94, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 95, 95, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 96, 96, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 97, 97, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 98, 98, false }, - - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 99, 99, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 100, 100, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 101, 101, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 102, 102, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 103, 103, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 104, 104, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 105, 105, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 106, 106, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 107, 107, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 108, 108, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 109, 109, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 110, 110, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 111, 111, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 112, 112, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 113, 113, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 114, 114, false }, - - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 115, 115, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 116, 116, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 117, 117, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 118, 118, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 119, 119, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 120, 120, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 121, 121, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 122, 122, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 123, 123, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 124, 124, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 125, 125, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 126, 126, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 127, 127, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 0, 0, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 1, 1, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 2, 2, false }, - - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 3, 3, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 4, 4, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 5, 5, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 6, 6, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 7, 7, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 8, 8, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 9, 9, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 10, 10, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 11, 11, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 12, 12, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 13, 13, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 14, 14, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 15, 15, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 16, 16, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 17, 17, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 18, 18, false }, - - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 19, 19, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 20, 20, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 21, 21, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 22, 22, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 23, 23, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 24, 24, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 25, 25, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 26, 26, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 27, 27, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 28, 28, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 29, 29, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 30, 30, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 31, 31, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 32, 32, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 33, 33, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 34, 34, false } + { QString("Acoustic Bass Drum"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 35, 35, false }, + { QString("Bass Drum 1"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 36, 36, false }, + { QString("Side Stick"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 37, 37, false }, + { QString("Acoustic Snare"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 38, 38, false }, + { QString("Hand Clap"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 39, 39, false }, + { QString("Electric Snare"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 40, 40, false }, + { QString("Low Floor Tom"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 41, 41, false }, + { QString("Closed Hi-Hat"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 42, 42, false }, + { QString("High Floor Tom"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 43, 43, false }, + { QString("Pedal Hi-Hat"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 44, 44, false }, + { QString("Low Tom"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 45, 45, false }, + { QString("Open Hi-Hat"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 46, 46, false }, + { QString("Low-Mid Tom"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 47, 47, false }, + { QString("Hi-Mid Tom"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 48, 48, false }, + { QString("Crash Cymbal 1"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 49, 49, false }, + { QString("High Tom"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 50, 50, false }, + + { QString("Ride Cymbal 1"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 51, 51, false }, + { QString("Chinese Cymbal"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 52, 52, false }, + { QString("Ride Bell"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 53, 53, false }, + { QString("Tambourine"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 54, 54, false }, + { QString("Splash Cymbal"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 55, 55, false }, + { QString("Cowbell"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 56, 56, false }, + { QString("Crash Cymbal 2"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 57, 57, false }, + { QString("Vibraslap"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 58, 58, false }, + { QString("Ride Cymbal 2"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 59, 59, false }, + { QString("Hi Bongo"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 60, 60, false }, + { QString("Low Bongo"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 61, 61, false }, + { QString("Mute Hi Conga"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 62, 62, false }, + { QString("Open Hi Conga"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 63, 63, false }, + { QString("Low Conga"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 64, 64, false }, + { QString("High Timbale"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 65, 65, false }, + { QString("Low Timbale"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 66, 66, false }, + + { QString("High Agogo"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 67, 67, false }, + { QString("Low Agogo"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 68, 68, false }, + { QString("Cabasa"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 69, 69, false }, + { QString("Maracas"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 70, 70, false }, + { QString("Short Whistle"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 71, 71, false }, + { QString("Long Whistle"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 72, 72, false }, + { QString("Short Guiro"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 73, 73, false }, + { QString("Long Guiro"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 74, 74, false }, + { QString("Claves"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 75, 75, false }, + { QString("Hi Wood Block"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 76, 76, false }, + { QString("Low Wood Block"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 77, 77, false }, + { QString("Mute Cuica"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 78, 78, false }, + { QString("Open Cuica"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 79, 79, false }, + { QString("Mute Triangle"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 80, 80, false }, + { QString("Open Triangle"), 100, 16, 32, -1, -1, 70, 90, 127, 110, 81, 81, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 82, 82, false }, + + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 83, 83, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 84, 84, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 85, 85, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 86, 86, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 87, 87, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 88, 88, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 89, 89, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 90, 90, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 91, 91, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 92, 92, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 93, 93, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 94, 94, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 95, 95, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 96, 96, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 97, 97, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 98, 98, false }, + + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 99, 99, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 100, 100, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 101, 101, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 102, 102, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 103, 103, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 104, 104, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 105, 105, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 106, 106, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 107, 107, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 108, 108, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 109, 109, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 110, 110, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 111, 111, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 112, 112, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 113, 113, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 114, 114, false }, + + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 115, 115, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 116, 116, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 117, 117, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 118, 118, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 119, 119, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 120, 120, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 121, 121, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 122, 122, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 123, 123, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 124, 124, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 125, 125, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 126, 126, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 127, 127, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 0, 0, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 1, 1, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 2, 2, false }, + + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 3, 3, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 4, 4, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 5, 5, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 6, 6, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 7, 7, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 8, 8, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 9, 9, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 10, 10, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 11, 11, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 12, 12, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 13, 13, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 14, 14, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 15, 15, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 16, 16, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 17, 17, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 18, 18, false }, + + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 19, 19, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 20, 20, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 21, 21, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 22, 22, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 23, 23, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 24, 24, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 25, 25, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 26, 26, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 27, 27, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 28, 28, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 29, 29, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 30, 30, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 31, 31, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 32, 32, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 33, 33, false }, + { QString(""), 100, 16, 32, -1, -1, 70, 90, 127, 110, 34, 34, false } }; DrumMap iNewDrumMap[128]; @@ -237,7 +238,18 @@ void initNewDrumMap() } } +//--------------------------------------------------------- +// clearDrumMap +// One-time only early init +//--------------------------------------------------------- +void clearDrumMap() + { + for (int i = 0; i < DRUM_MAPSIZE; ++i) { + DrumMap& d = MusEGlobal::drumMap[i]; + d.vol = d.len = d.channel = d.port = d.lv1 = d.lv2 = d.lv3 = d.lv4 = d.enote = d.anote = d.mute = 0; + } + } //--------------------------------------------------------- // initDrumMap // populate Inmap and Outmap @@ -246,7 +258,7 @@ void initNewDrumMap() void initDrumMap() { for (int i = 0; i < DRUM_MAPSIZE; ++i) { - DrumMap d = MusEGlobal::drumMap[i]; + DrumMap& d = MusEGlobal::drumMap[i]; //Make sure we're not overwriting any values loaded //On init, all these values are zero. If so, just set the drummap entry to the initial drummap entry. if (!(d.vol || d.len || d.channel || d.port || d.lv1 || d.lv2 || d.lv3 || d.lv4 || d.enote || d.anote || d.mute)) diff --git a/muse2/muse/midiedit/drummap.h b/muse2/muse/midiedit/drummap.h index 2dca10d6..f8633b2f 100644 --- a/muse2/muse/midiedit/drummap.h +++ b/muse2/muse/midiedit/drummap.h @@ -40,8 +40,11 @@ struct DrumMap { unsigned char vol; // playback volume, percent. int quant; int len; // len of event in ticks + + // Default to track port if -1 and track channel if -1. int channel; // midi channel int port; // midi port + char lv1, lv2, lv3, lv4; // velocities char enote, anote; // input note - output note bool mute; @@ -57,6 +60,7 @@ struct DrumMap { extern DrumMap iNewDrumMap[128]; extern void initNewDrumMap(); +extern void clearDrumMap(); // One-time only early init extern void initDrumMap(); extern void writeDrumMap(int level, Xml& xml, bool external); extern void readDrumMap(Xml& xml, bool external); |