summaryrefslogtreecommitdiff
path: root/muse2/muse/midi.cpp
diff options
context:
space:
mode:
authorFlorian Jung <flo@windfisch.org>2012-03-15 18:21:23 +0000
committerFlorian Jung <flo@windfisch.org>2012-03-15 18:21:23 +0000
commit27b7bf6815cda7abb67026c37b3e44daee1803cb (patch)
tree0b9d1c0bc84ac7ff8032e707f2b5fb4e0aaabb5c /muse2/muse/midi.cpp
parent2d6f113a10eb485694e20a78500f650776d701e3 (diff)
merged with trunk
Diffstat (limited to 'muse2/muse/midi.cpp')
-rw-r--r--muse2/muse/midi.cpp31
1 files changed, 10 insertions, 21 deletions
diff --git a/muse2/muse/midi.cpp b/muse2/muse/midi.cpp
index 85a47ead..2c3c3d8c 100644
--- a/muse2/muse/midi.cpp
+++ b/muse2/muse/midi.cpp
@@ -168,7 +168,6 @@ 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 0x7c: s = "MusE Soft Synth"; break;
case MUSE_SYNTH_SYSEX_MFG_ID: s = "MusE Soft Synth"; break; // p4.0.27
case 0x7d: s = "Educational Use"; break;
case 0x7e: s = "Universal: Non Real Time"; break;
@@ -423,7 +422,7 @@ void buildMidiEventList(EventList* del, const MPEventList* el, MidiTrack* track,
break;
case 0x6: // Marker
{
- unsigned ltick = CALC_TICK(tick);//(tick * MusEGlobal::config.division + div/2) / div;
+ unsigned ltick = CALC_TICK(tick);
MusEGlobal::song->addMarker(QString((const char*)(data)), ltick, false);
}
break;
@@ -439,8 +438,8 @@ void buildMidiEventList(EventList* del, const MPEventList* el, MidiTrack* track,
case 0x51: // Tempo
{
unsigned tempo = data[2] + (data[1] << 8) + (data[0] <<16);
- unsigned ltick = CALC_TICK(tick);// (unsigned(tick) * unsigned(MusEGlobal::config.division) + unsigned(div/2)) / unsigned(div);
- // After ca 10 mins 32 bits will not be enough... This expression has to be changed/factorized or so in some "sane" way...
+ unsigned ltick = CALC_TICK(tick);
+ // FIXME: After ca 10 mins 32 bits will not be enough... This expression has to be changed/factorized or so in some "sane" way...
MusEGlobal::tempomap.addTempo(ltick, tempo);
}
break;
@@ -451,8 +450,7 @@ void buildMidiEventList(EventList* del, const MPEventList* el, MidiTrack* track,
int timesig_n = 1;
for (int i = 0; i < n; i++)
timesig_n *= 2;
- int ltick = CALC_TICK(tick);//(tick * MusEGlobal::config.division + div/2) / div;
- ///sigmap.add(ltick, timesig_z, timesig_n);
+ int ltick = CALC_TICK(tick);
AL::sigmap.add(ltick, AL::TimeSignature(timesig_z, timesig_n));
}
break;
@@ -535,9 +533,9 @@ void buildMidiEventList(EventList* del, const MPEventList* el, MidiTrack* track,
i->first, ev.pitch(), ev.velo());
continue;
}
- int tick = CALC_TICK(ev.tick()); //(ev.tick() * MusEGlobal::config.division + div/2) / div;
+ int tick = CALC_TICK(ev.tick());
if (ev.isNote()) {
- int lenTick = CALC_TICK(ev.lenTick()); //(ev.lenTick() * MusEGlobal::config.division + div/2) / div;
+ int lenTick = CALC_TICK(ev.lenTick());
ev.setLenTick(lenTick);
}
ev.setTick(tick);
@@ -566,7 +564,7 @@ void Audio::sendLocalOff()
{
for (int k = 0; k < MIDI_PORTS; ++k) {
for (int i = 0; i < MIDI_CHANNELS; ++i)
- MusEGlobal::midiPorts[k].sendEvent(MusECore::MidiPlayEvent(0, k, i, MusECore::ME_CONTROLLER, MusECore::CTRL_LOCAL_OFF, 0));
+ MusEGlobal::midiPorts[k].sendEvent(MusECore::MidiPlayEvent(0, k, i, MusECore::ME_CONTROLLER, MusECore::CTRL_LOCAL_OFF, 0), true);
}
}
@@ -636,12 +634,10 @@ void Audio::initDevices()
}
}
//
- // damit Midi-Devices, die mehrere Ports besitzen, wie z.B.
- // das Korg NS5R, nicht mehrmals zwischen GM und XG/GS hin und
- // hergeschaltet werden, wird zun�hst auf allen Ports GM
- // initialisiert, und dann erst XG/GS
+ // First all ports are initialized to GM and then are changed
+ // to XG/GS in order to prevent that devices with more than one
+ // port, e.g. Korg NS5R, toggle between GM and XG/GS several times.
//
-
// Standard initialization...
for (int i = 0; i < MIDI_PORTS; ++i) {
if (!activePorts[i])
@@ -1082,14 +1078,12 @@ void Audio::processMidi()
if (devport == defaultPort) {
event.setPort(port);
if(md && track->recEcho())
- //playEvents->add(event);
md->addScheduledEvent(event);
}
else {
// Hmm, this appears to work, but... Will this induce trouble with md->setNextPlayEvent??
MidiDevice* mdAlt = MusEGlobal::midiPorts[devport].device();
if(mdAlt && track->recEcho())
- //mdAlt->playEvents()->add(event);
mdAlt->addScheduledEvent(event);
}
// Shall we activate meters even while rec echo is off? Sure, why not...
@@ -1128,7 +1122,6 @@ void Audio::processMidi()
drumRecEvent.setB(preVelo);
// Tested: Events were not being recorded for a drum map entry pointing to a
// different port. This must have been wrong - buildMidiEventList would ignore this. Tim.
- //drumRecEvent.setPort(devport);
drumRecEvent.setPort(port); //rec-event to current port
drumRecEvent.setChannel(track->outChannel()); //rec-event to current channel
@@ -1174,11 +1167,9 @@ void Audio::processMidi()
else if (state == PRECOUNT) {
isMeasure = (clickno % clicksMeasure) == 0;
}
- //int frame = MusEGlobal::tempomap.tick2frame(midiClick) + frameOffset;
int evtime = extsync ? midiClick : MusEGlobal::tempomap.tick2frame(midiClick) + frameOffset; // p3.3.25
if (md) {
- //MusECore::MidiPlayEvent ev(frame, MusEGlobal::clickPort, MusEGlobal::clickChan, MusECore::ME_NOTEON,
MusECore::MidiPlayEvent ev(evtime, MusEGlobal::clickPort, MusEGlobal::clickChan, MusECore::ME_NOTEON,
MusEGlobal::beatClickNote, MusEGlobal::beatClickVelo);
@@ -1193,7 +1184,6 @@ void Audio::processMidi()
md->addStuckNote(ev);
}
if (MusEGlobal::audioClickFlag) {
- //MusECore::MidiPlayEvent ev1(frame, 0, 0, MusECore::ME_NOTEON, 0, 0);
MusECore::MidiPlayEvent ev(evtime, 0, 0, MusECore::ME_NOTEON, 0, 0);
ev.setA(isMeasure ? 0 : 1);
metronome->addScheduledEvent(ev);
@@ -1221,7 +1211,6 @@ void Audio::processMidi()
// ALSA devices handled by another thread.
if((*id)->deviceType() != MidiDevice::ALSA_MIDI)
- //if((*id)->deviceType() == MidiDevice::JACK_MIDI)
(*id)->processMidi();
}
MusEGlobal::midiBusy=false;