summaryrefslogtreecommitdiff
path: root/muse/muse/midiinport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse/muse/midiinport.cpp')
-rw-r--r--muse/muse/midiinport.cpp102
1 files changed, 39 insertions, 63 deletions
diff --git a/muse/muse/midiinport.cpp b/muse/muse/midiinport.cpp
index 8953725d..afe53876 100644
--- a/muse/muse/midiinport.cpp
+++ b/muse/muse/midiinport.cpp
@@ -105,71 +105,52 @@ void MidiInPort::eventReceived(jack_midi_event_t* ev)
// ^ ^ ^
// catch process play
//
- event.setTime(audioDriver->frameTime() + ev->time);
-
- switch(*(ev->buffer) & 0xf0) {
- case 0x90:
- event.setChannel(*(ev->buffer) & 0xf);
- event.setType(ME_NOTEON);
+ const SeqTime* st = audio->seqTime();
+
+// unsigned curFrame = st->startFrame() + segmentSize;
+ unsigned curFrame = st->lastFrameTime;
+ event.setTime(curFrame + ev->time);
+
+ event.setChannel(*(ev->buffer) & 0xf);
+ int type = *(ev->buffer) & 0xf0;
+ int a = *(ev->buffer + 1) & 0x7f;
+ int b = *(ev->buffer + 2) & 0x7f;
+ event.setType(type);
+ switch(type) {
+ case ME_NOTEON:
+ case ME_NOTEOFF:
+ case ME_CONTROLLER:
event.setA(*(ev->buffer + 1));
event.setB(*(ev->buffer + 2));
break;
- case 0x80:
- event.setChannel(*(ev->buffer) & 0xf);
- event.setType(ME_NOTEOFF);
+ case ME_PROGRAM:
+ case ME_AFTERTOUCH:
event.setA(*(ev->buffer + 1));
- event.setB(*(ev->buffer + 2));
- break;
-#if 0
- case SND_SEQ_EVENT_KEYPRESS:
- event.setChannel(ev->data.note.channel);
- event.setType(ME_POLYAFTER);
- event.setA(ev->data.note.note);
- event.setB(ev->data.note.velocity);
- break;
-
- case SND_SEQ_EVENT_SYSEX:
- event.setTime(0); // mark as used
- event.setType(ME_SYSEX);
- event.setData((unsigned char*)(ev->data.ext.ptr)+1,
- ev->data.ext.len-2);
- break;
-
- case SND_SEQ_EVENT_NOTEOFF:
- event.setChannel(ev->data.note.channel);
- event.setType(ME_NOTEOFF);
- event.setA(ev->data.note.note);
- event.setB(ev->data.note.velocity);
break;
- case SND_SEQ_EVENT_CHANPRESS:
- event.setChannel(ev->data.control.channel);
- event.setType(ME_AFTERTOUCH);
- event.setA(ev->data.control.value);
+ case ME_PITCHBEND:
+ event.setA(((b << 7) + a) - 8192);
break;
- case SND_SEQ_EVENT_PGMCHANGE:
- event.setChannel(ev->data.control.channel);
- event.setType(ME_PROGRAM);
- event.setA(ev->data.control.value);
- break;
-
- case SND_SEQ_EVENT_PITCHBEND:
- event.setChannel(ev->data.control.channel);
- event.setType(ME_CONTROLLER);
- event.setA(CTRL_PITCH);
- event.setB(ev->data.control.value);
- break;
-
- case SND_SEQ_EVENT_CONTROLLER:
- event.setChannel(ev->data.control.channel);
- event.setType(ME_CONTROLLER);
- event.setA(ev->data.control.param);
- event.setB(ev->data.control.value);
- break;
-#endif
- default:
- return; // ignore
+ case ME_SYSEX:
+ {
+ int type = *(ev->buffer) & 0xff;
+ switch(type) {
+ case ME_SYSEX:
+ event.setTime(0); // mark as used
+ event.setType(ME_SYSEX);
+ event.setData((unsigned char*)(ev->buffer + 1),
+ ev->size - 2);
+ break;
+ case ME_CLOCK:
+ case ME_SENSE:
+ break;
+ default:
+ printf("unknown event 0x%02x\n", type);
+ return;
+ }
+ }
+ return;
}
if (midiInputTrace) {
@@ -183,7 +164,7 @@ void MidiInPort::eventReceived(jack_midi_event_t* ev)
MidiEventList il, ol;
il.insert(event);
- pipeline()->apply(audio->seqTime()->curTickPos, audio->seqTime()->nextTickPos, &il, &ol);
+ pipeline()->apply(st->curTickPos, st->nextTickPos, &il, &ol);
//
// update midi activity
@@ -218,11 +199,6 @@ void MidiInPort::beforeProcess()
{
if (!jackPort(0).isZero())
audioDriver->collectMidiEvents(this, jackPort(0));
-
-// Port _jackPort[MAX_CHANNELS];
- // collect jack midi events
-// void eventReceived(snd_seq_event_t*);
-
tmpRecordCount = recordFifo.getSize();
}