Timestamps in midiReadProc received via Bluetooth (iOS)
Timestamps in midiReadProc received via Bluetooth (iOS)
- Subject: Timestamps in midiReadProc received via Bluetooth (iOS)
- From: Sven Thoennissen <email@hidden>
- Date: Wed, 27 Dec 2017 16:54:13 +0100
Hello,
While writing a MIDI logging app for iOS I found out that the timestamps
received in MIDI packets via Bluetooth are unchanged until I pause events for
about 3 seconds.
I assumed the timestamps of each packet are accurate with at least milliseconds
precision.
Since these timestamps are eventually shown in the UI it looks odd in my app
because equal timestamps are displayed even though the events are clearly apart
in time.
When receiving packets via Wifi (Network Session, initiated from the Mac) the
timestamps are different with each packet, as expected.
This log (by means of NSLog()), copied from Xcode output console, shows the
problem:
2017-12-27 16:19:25.051 MIDI Sniffer[233:13563] midiproc ts=58424376000
status=0x90 d1=0x43 d2=0x35
2017-12-27 16:19:25.171 MIDI Sniffer[233:13563] midiproc ts=58424376000
status=0x80 d1=0x43 d2=0x26
2017-12-27 16:19:27.257 MIDI Sniffer[233:13563] midiproc ts=58424376000
status=0x90 d1=0x45 d2=0x36
2017-12-27 16:19:27.406 MIDI Sniffer[233:13563] midiproc ts=58424376000
status=0x80 d1=0x45 d2=0x17
2017-12-27 16:19:28.246 MIDI Sniffer[233:13563] midiproc ts=58424376000
status=0x90 d1=0x47 d2=0x39
2017-12-27 16:19:28.365 MIDI Sniffer[233:13563] midiproc ts=58424376000
status=0x80 d1=0x47 d2=0x2b
2017-12-27 16:19:31.922 MIDI Sniffer[233:13563] midiproc ts=58588752000
status=0x90 d1=0x48 d2=0x1d
2017-12-27 16:19:32.101 MIDI Sniffer[233:13563] midiproc ts=58588752000
status=0x80 d1=0x48 d2=0x0b
Setup: MIDI keyboard -> Mac with Sierra (Logic Pro X as MIDI router) ->
Bluetooth -> iPad
Note that the NSLog() timestamp prefix shows the actual time of day as I play
the notes on the MIDI keyboard.
Here you can see how much time passed between events.
The timestamp printed after "ts=" is the one from the MIDIPacket struct. It
does not change in the first 6 events above.
It changes only if I wait approx. 3 seconds, see the last 2 events.
The code in the midiReadProc callback looks like this:
NSLog(@"midiproc ts=%llu status=%#04x d1=%#04x d2=%#04x", packet->timeStamp, c,
d1, midiBytes[2]);
(c, d1, and midiBytes are local variables that contain the 3-byte MIDI message
from the packet)
I observed this on an iPad mini 1 with iOS 9.3.5 and also on an iPad Air 2 with
iOS 11.
Is this something that cannot be avoided with Bluetooth?
I would prefer to simply read the packet timestamp instead of capturing my own
mach timestamp from the system in the MIDI callback.
Thanks for any ideas. If encouraged I could file a bug report with Apple.
Best,
Sven
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden