Author: korli Date: 2010-04-01 20:24:53 +0200 (Thu, 01 Apr 2010) New Revision: 36018 Changeset: http://dev.haiku-os.org/changeset/36018/haiku Ticket: http://dev.haiku-os.org/ticket/5664 Modified: haiku/trunk/src/servers/midi/PortDrivers.cpp Log: Patch from Pete Goodeve to add time data to incoming MIDI (#5664) Modified: haiku/trunk/src/servers/midi/PortDrivers.cpp =================================================================== --- haiku/trunk/src/servers/midi/PortDrivers.cpp 2010-03-31 21:23:07 UTC (rev 36017) +++ haiku/trunk/src/servers/midi/PortDrivers.cpp 2010-04-01 18:24:53 UTC (rev 36018) @@ -98,6 +98,8 @@ perror("Error reading data from driver"); break; } + + bigtime_t timestamp = system_time(); if (haveSysEx) { // System Exclusive mode @@ -111,11 +113,11 @@ continue; } else if ((next & 0xF8) == 0xF8) { // System Realtime interleaved in System Exclusive sequence - SpraySystemRealTime(next); + SpraySystemRealTime(next, timestamp); continue; } else { // Whatever byte, this one ends the running SysEx sequence - SpraySystemExclusive(sysexBuf, sysexSize); + SpraySystemExclusive(sysexBuf, sysexSize, timestamp); haveSysEx = false; if (next == B_SYS_EX_END) { // swallow SysEx end byte @@ -128,7 +130,7 @@ if ((next & 0xF8) == 0xF8) { // System Realtime - SpraySystemRealTime(next); + SpraySystemRealTime(next, timestamp); } else if ((next & 0xF0) == 0xF0) { // System Common runningStatus = 0; @@ -157,7 +159,7 @@ case B_SYS_EX_END: // Unpaired with B_SYS_EX_START, but pass it anyway... case B_TUNE_REQUEST: - SpraySystemCommon(next, 0, 0); + SpraySystemCommon(next, 0, 0, timestamp); break; } } else if ((next & 0x80) == 0x80) { @@ -187,43 +189,51 @@ if (--needed == 0) { switch (msgBuf[0] & 0xF0) { case B_NOTE_OFF: - SprayNoteOff(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2]); + SprayNoteOff(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2], + timestamp); break; case B_NOTE_ON: - SprayNoteOn(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2]); + SprayNoteOn(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2], + timestamp); break; case B_KEY_PRESSURE: - SprayKeyPressure(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2]); + SprayKeyPressure(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2], + timestamp); break; case B_CONTROL_CHANGE: - SprayControlChange(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2]); + SprayControlChange(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2], + timestamp); break; case B_PROGRAM_CHANGE: - SprayProgramChange(msgBuf[0] & 0x0F, msgBuf[1]); + SprayProgramChange(msgBuf[0] & 0x0F, msgBuf[1], + timestamp); break; case B_CHANNEL_PRESSURE: - SprayChannelPressure(msgBuf[0] & 0x0F, msgBuf[1]); + SprayChannelPressure(msgBuf[0] & 0x0F, msgBuf[1], + timestamp); break; case B_PITCH_BEND: - SprayPitchBend(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2]); + SprayPitchBend(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2], + timestamp); break; } switch (msgBuf[0]) { case B_SONG_POSITION: - SpraySystemCommon(msgBuf[0], msgBuf[1], msgBuf[2]); + SpraySystemCommon(msgBuf[0], msgBuf[1], msgBuf[2], + timestamp); break; case B_MIDI_TIME_CODE: case B_SONG_SELECT: case B_CABLE_MESSAGE: - SpraySystemCommon(msgBuf[0], msgBuf[1], 0); + SpraySystemCommon(msgBuf[0], msgBuf[1], 0, timestamp); break; } }