 
         public enum SystemCommonType {
 
-            case systemExclusive
+            case systemExclusive(bytes: [UInt8])
 
             case midiTimeCodeQuarterFrame(type: UInt8, values: UInt8)
 

        
    }
    
    public init(_ message: Message, timeStamp: MIDITimeStamp) {
        switch message {
        case .noteOff(let channel, let key, let velocity):
            self.init(timeStamp: timeStamp, status: 8, channel: channel, data1: key, data2: velocity)
        case .noteOn(let channel, let key, let velocity):
            self.init(timeStamp: timeStamp, status: 9, channel: channel, data1: key, data2: velocity)
        case .polyphonicKeyPressure(let channel, let key, let pressure):
            self.init(timeStamp: timeStamp, status: 10, channel: channel, data1: key, data2: pressure)
        case .controlChange(let channel, let controller, let value):
            self.init(timeStamp: timeStamp, status: 11, channel: channel, data1: controller, data2: value)
        case .channelMode(let channel, let type):
            switch type {
            case .allSoundOff:
                self.init(timeStamp: timeStamp, status: 11, channel: channel, data1: 120, data2: 0)
            case .resetAllControllers:
                self.init(timeStamp: timeStamp, status: 11, channel: channel, data1: 121, data2: 0)
            case .localControlOff:
                self.init(timeStamp: timeStamp, status: 11, channel: channel, data1: 122, data2: 0)
            case .localControlOn:
                self.init(timeStamp: timeStamp, status: 11, channel: channel, data1: 122, data2: 127)
            case .allNotesOff:
                self.init(timeStamp: timeStamp, status: 11, channel: channel, data1: 123, data2: 0)
            case .omniModeOff:
                self.init(timeStamp: timeStamp, status: 11, channel: channel, data1: 124, data2: 0)
            case .omniModeOn:
                self.init(timeStamp: timeStamp, status: 11, channel: channel, data1: 125, data2: 0)
            case .monoModeOn(let channels):
                self.init(timeStamp: timeStamp, status: 11, channel: channel, data1: 126, data2: channels)
            case .polyModeOn:
                self.init(timeStamp: timeStamp, status: 11, channel: channel, data1: 127, data2: 0)
            }
        case .programChange(let channel, let number):
            self.init(timeStamp: timeStamp, status: 12, channel: channel, data1: number)
        case .channelPressure(let channel, let pressure):
            self.init(timeStamp: timeStamp, status: 13, channel: channel, data1: pressure)
        case .pitchBendChange(let channel, let value):
            self.init(timeStamp: timeStamp, status: 14, channel: channel, data1: value.leastSignificantSevenBits, data2: value.mostSignificantSevenBits)
        case .systemCommon(let type):
            switch type {
            case .systemExclusive:
                self.init(timeStamp: timeStamp, status: 15, channel: 0)
            case .midiTimeCodeQuarterFrame(let type, let values):
                self.init(timeStamp: timeStamp, status: 15, channel: 1, data1: UInt8(mostSignificantFourBits: type, leastSignificantFourBits: values))
            case .songPositionPointer(let value):
                self.init(timeStamp: timeStamp, status: 15, channel: 2, data1: value.leastSignificantSevenBits, data2: value.mostSignificantSevenBits)
            case .songSelect(let song):
                self.init(timeStamp: timeStamp, status: 15, channel: 3, data1: song)
            case .tuneRequest:
                self.init(timeStamp: timeStamp, status: 15, channel: 5)
            }
        case .systemRealTime(let type):
            switch type {
            case .timingClock:
                self.init(timeStamp: timeStamp, status: 15, channel: 8)
            case .start:
                self.init(timeStamp: timeStamp, status: 15, channel: 10)
            case .continue:
                self.init(timeStamp: timeStamp, status: 15, channel: 11)
            case .stop:
                self.init(timeStamp: timeStamp, status: 15, channel: 12)
            case .activeSensing:
                self.init(timeStamp: timeStamp, status: 15, channel: 14)
            case .reset:
                self.init(timeStamp: timeStamp, status: 15, channel: 15)
            }
        case .unknown:
            self.init(timeStamp: timeStamp)
        }
    }

    public init(_ message: Message, delay: TimeInterval = 0.0) {
        let timeStamp = mach_absolute_time() + MIDITimeStamp(delay * 1_000_000_000)
        self.init(message, timeStamp: timeStamp)
    }
    
}

        case 15:
            switch channel {
            case 0:
                return .systemCommon(type: .systemExclusive(bytes: bytes))
            case 1:
                return .systemCommon(type: .midiTimeCodeQuarterFrame(type: data1.mostSignificantFourBits, values: data1.leastSignificantFourBits))
            case 2:
