summaryrefslogtreecommitdiff
path: root/muse2/muse/midiedit
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2013-02-02 07:37:31 +0000
committerTim E. Real <termtech@rogers.com>2013-02-02 07:37:31 +0000
commitf118ed0cfca8ab717b87e1f00459199acba80bb9 (patch)
tree7a5a46771dcea1a978182d0da0134e6a5d049745 /muse2/muse/midiedit
parent5d8ab88bd418da3a4047b38707b5a49f32e912ba (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.cpp60
-rw-r--r--muse2/muse/midiedit/dlist.cpp80
-rw-r--r--muse2/muse/midiedit/drumedit.cpp8
-rw-r--r--muse2/muse/midiedit/drummap.cpp286
-rw-r--r--muse2/muse/midiedit/drummap.h4
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);