 
 extension MIDIPacket {
     
-    public init(timeStamp: MIDITimeStamp, length: UInt16 = 0) {
+    public init(delay: TimeInterval = 0.0) {
         self.init()
-        self.timeStamp = timeStamp
-        self.length = length
-    }
-    
-    public init(timeStamp: MIDITimeStamp, length: UInt16 = 1, status: UInt8, channel: UInt8) {
-        self.init(timeStamp: timeStamp, length: length)
+        self.timeStamp = mach_absolute_time() + MIDITimeStamp(delay * 1_000_000_000)
+    }
+    
+}
+
+extension MIDIPacket {
+    
+    public init(status: UInt8, channel: UInt8, delay: TimeInterval = 0.0) {
+        self.init(delay: delay)
+        self.length = 1
         self.status = status
         self.channel = channel.leastSignificantFourBits
     }
 
-    public init(timeStamp: MIDITimeStamp, length: UInt16 = 2, status: UInt8, channel: UInt8, data1: UInt8) {
-        self.init(timeStamp: timeStamp, length: length, status: status, channel: channel)
+    public init(status: UInt8, channel: UInt8, data1: UInt8, delay: TimeInterval = 0.0) {
+        self.init(delay: delay)
+        self.length = 2
+        self.status = status
+        self.channel = channel.leastSignificantFourBits
         self.data1 = data1.leastSignificantSevenBits
     }
 
-    public init(timeStamp: MIDITimeStamp, length: UInt16 = 3, status: UInt8, channel: UInt8, data1: UInt8, data2: UInt8) {
-        self.init(timeStamp: timeStamp, length: length, status: status, channel: channel, data1: data1)
+    public init(status: UInt8, channel: UInt8, data1: UInt8, data2: UInt8, delay: TimeInterval = 0.0) {
+        self.init(delay: delay)
+        self.length = 3
+        self.status = status
+        self.channel = channel.leastSignificantFourBits
+        self.data1 = data1.leastSignificantSevenBits
         self.data2 = data2.leastSignificantSevenBits
     }
     


        public enum SystemCommonType {

            case systemExclusive

            case midiTimeCodeQuarterFrame(type: UInt8, values: UInt8)


        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:
