summaryrefslogtreecommitdiff
path: root/muse2/muse/midi.cpp
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2012-10-20 04:10:19 +0000
committerTim E. Real <termtech@rogers.com>2012-10-20 04:10:19 +0000
commitc4aca7b81e76e0f098ac0f855599bdf1e3cf1e22 (patch)
tree177c77d19a5867866cff997c01a187fc54530759 /muse2/muse/midi.cpp
parent5821f678ca1c95a97170588a77303e2f14e4dbdb (diff)
Improved: Midi initializations. New settings options, can be 'quiet'. Complete rewrite of initializations coding.
Improved: Midi controller graphs: Control selector 'S' popup now stay-open, AND NOW with multi-coloured dots. Bonus! Pianoroll and drum edit 'Ctrl' buttons ALSO now popup this very same menu. Improved: 'Old' drum track 'drum controllers' display and operation: Fixed several problems.
Diffstat (limited to 'muse2/muse/midi.cpp')
-rw-r--r--muse2/muse/midi.cpp54
1 files changed, 10 insertions, 44 deletions
diff --git a/muse2/muse/midi.cpp b/muse2/muse/midi.cpp
index f1d5124d..33b98c00 100644
--- a/muse2/muse/midi.cpp
+++ b/muse2/muse/midi.cpp
@@ -169,7 +169,7 @@ QString nameSysex(unsigned int len, const unsigned char* buf)
case 0x43: s = "Yamaha: "; break;
case 0x44: s = "Casio"; break;
case 0x45: s = "Akai"; break;
- case MUSE_SYNTH_SYSEX_MFG_ID: s = "MusE Soft Synth"; break; // p4.0.27
+ case MUSE_SYNTH_SYSEX_MFG_ID: s = "MusE Soft Synth"; break;
case 0x7d: s = "Educational Use"; break;
case 0x7e: s = "Universal: Non Real Time"; break;
case 0x7f: s = "Universal: Real Time"; break;
@@ -521,7 +521,7 @@ void buildMidiEventList(EventList* del, const MPEventList* el, MidiTrack* track,
printf("ERROR: THIS SHOULD NEVER HAPPEN: k==i in midi.cpp:buildMidiEventList()\n");
else
mel.erase(k);
- i = mel.begin(); // p4.0.34
+ i = mel.begin();
continue;
}
}
@@ -592,49 +592,15 @@ void Audio::panic()
//---------------------------------------------------------
// initDevices
-// - called on seek to position 0
+// - called when instrument init sequences plus controller
+// defaults should be checked and/or sent
// - called from arranger pulldown menu
//---------------------------------------------------------
-void Audio::initDevices()
+void Audio::initDevices(bool force)
{
- //
- // mark all used ports
- //
- bool activePorts[MIDI_PORTS];
- for (int i = 0; i < MIDI_PORTS; ++i)
- activePorts[i] = false;
-
- MusECore::MidiTrackList* tracks = MusEGlobal::song->midis();
- for (MusECore::iMidiTrack it = tracks->begin(); it != tracks->end(); ++it) {
- MusECore::MidiTrack* track = *it;
- activePorts[track->outPort()] = true;
- }
- if (MusEGlobal::song->click())
- activePorts[MusEGlobal::clickPort] = true;
-
- //
- // test for explicit instrument initialization
- //
-
for (int i = 0; i < MIDI_PORTS; ++i) {
- if (!activePorts[i])
- continue;
-
- MusECore::MidiPort* port = &MusEGlobal::midiPorts[i];
- MusECore::MidiInstrument* instr = port->instrument();
- MidiDevice* md = port->device();
-
- if (instr && md) {
- EventList* events = instr->midiInit();
- if (events->empty())
- continue;
- for (iEvent ie = events->begin(); ie != events->end(); ++ie) {
- MusECore::MidiPlayEvent ev(0, i, 0, ie->second);
- md->putEvent(ev);
- }
- activePorts[i] = false; // no standard initialization
- }
+ MusEGlobal::midiPorts[i].sendPendingInitializations(force);
}
}
@@ -992,12 +958,12 @@ void Audio::processMidi()
RouteList* irl = track->inRoutes();
for(ciRoute r = irl->begin(); r != irl->end(); ++r)
{
- if(!r->isValid() || (r->type != Route::MIDI_PORT_ROUTE)) // p3.3.49
+ if(!r->isValid() || (r->type != Route::MIDI_PORT_ROUTE))
continue;
- int devport = r->midiPort; //
+ int devport = r->midiPort;
if (devport == -1)
continue;
- MidiDevice* dev = MusEGlobal::midiPorts[devport].device(); //
+ MidiDevice* dev = MusEGlobal::midiPorts[devport].device();
if(!dev)
continue;
int channelMask = r->channel;
@@ -1316,7 +1282,7 @@ void Audio::processMidi()
for(iMidiDevice id = MusEGlobal::midiDevices.begin(); id != MusEGlobal::midiDevices.end(); ++id)
{
// We are done with the 'frozen' recording fifos, remove the events.
- (*id)->afterProcess(); // p4.0.34
+ (*id)->afterProcess();
// ALSA devices handled by another thread.
if((*id)->deviceType() != MidiDevice::ALSA_MIDI)