Ticket #5664: PortDrivers.diff

File PortDrivers.diff, 3.0 KB (added by Pete, 10 years ago)

Patch to add time data to incoming MIDI

  • src/servers/midi/PortDrivers.cpp

    old new  
    9797                perror("Error reading data from driver");
    9898            break;
    9999        }
     100   
     101        bigtime_t timestamp = system_time();
    100102
    101103        if (haveSysEx) {
    102104            // System Exclusive mode
     
    110112                continue;
    111113            } else if ((next & 0xF8) == 0xF8) {
    112114                // System Realtime interleaved in System Exclusive sequence
    113                 SpraySystemRealTime(next);
     115                SpraySystemRealTime(next, timestamp);
    114116                continue;
    115117            } else { 
    116118                // Whatever byte, this one ends the running SysEx sequence
    117                 SpraySystemExclusive(sysexBuf, sysexSize);
     119                SpraySystemExclusive(sysexBuf, sysexSize, timestamp);
    118120                haveSysEx = false;
    119121                if (next == B_SYS_EX_END) {
    120122                    // swallow SysEx end byte
     
    127129       
    128130        if ((next & 0xF8) == 0xF8) {
    129131            // System Realtime
    130             SpraySystemRealTime(next);
     132            SpraySystemRealTime(next, timestamp);
    131133        } else if ((next & 0xF0) == 0xF0) {
    132134            // System Common
    133135            runningStatus = 0;
     
    156158                case B_SYS_EX_END: 
    157159                    // Unpaired with B_SYS_EX_START, but pass it anyway...
    158160                case B_TUNE_REQUEST:
    159                     SpraySystemCommon(next, 0, 0);
     161                    SpraySystemCommon(next, 0, 0, timestamp);
    160162                    break;
    161163            }           
    162164        } else if ((next & 0x80) == 0x80) {
     
    186188            if (--needed == 0) {
    187189                switch (msgBuf[0] & 0xF0) {
    188190                    case B_NOTE_OFF:
    189                         SprayNoteOff(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2]);
     191                        SprayNoteOff(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2], timestamp);
    190192                        break;
    191193
    192194                    case B_NOTE_ON:
    193                         SprayNoteOn(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2]);
     195                        SprayNoteOn(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2], timestamp);
    194196                        break;
    195197
    196198                    case B_KEY_PRESSURE:
    197                         SprayKeyPressure(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2]);
     199                        SprayKeyPressure(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2], timestamp);
    198200                        break;
    199201
    200202                    case B_CONTROL_CHANGE:
    201                         SprayControlChange(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2]);
     203                        SprayControlChange(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2], timestamp);
    202204                        break;
    203205
    204206                    case B_PROGRAM_CHANGE:
    205                         SprayProgramChange(msgBuf[0] & 0x0F, msgBuf[1]);
     207                        SprayProgramChange(msgBuf[0] & 0x0F, msgBuf[1], timestamp);
    206208                        break;
    207209
    208210                    case B_CHANNEL_PRESSURE:
    209                         SprayChannelPressure(msgBuf[0] & 0x0F, msgBuf[1]);
     211                        SprayChannelPressure(msgBuf[0] & 0x0F, msgBuf[1], timestamp);
    210212                        break;
    211213
    212214                    case B_PITCH_BEND:
    213                         SprayPitchBend(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2]);
     215                        SprayPitchBend(msgBuf[0] & 0x0F, msgBuf[1], msgBuf[2], timestamp);
    214216                        break;
    215217                }
    216218
    217219                switch (msgBuf[0]) {
    218220                    case B_SONG_POSITION:
    219                         SpraySystemCommon(msgBuf[0], msgBuf[1], msgBuf[2]);
     221                        SpraySystemCommon(msgBuf[0], msgBuf[1], msgBuf[2], timestamp);
    220222                        break;
    221223
    222224                    case B_MIDI_TIME_CODE:
    223225                    case B_SONG_SELECT:
    224226                    case B_CABLE_MESSAGE:
    225                         SpraySystemCommon(msgBuf[0], msgBuf[1], 0);
     227                        SpraySystemCommon(msgBuf[0], msgBuf[1], 0, timestamp);
    226228                        break;
    227229                }
    228230            }