Date: Sun, 27 Feb 2022 18:45:40 +0100 From: Florian Walpen <dev@submerge.ch> To: freebsd-multimedia@freebsd.org Cc: Hans Petter Selasky <hps@selasky.org> Subject: Re: New FreeBSD port ALSA to JACK MIDI, a2jmidid Message-ID: <5113897.hZNMGjoUbN@z800> In-Reply-To: <50bd092c-9d5e-645d-2e5a-16a92d83a0db@selasky.org> References: <a1f43e5a-5d1f-1980-e771-00a0064f74bb@selasky.org> <22854640.gYbqZ1YImA@z800> <50bd092c-9d5e-645d-2e5a-16a92d83a0db@selasky.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Ok, finally got around to measure and compare MIDI latency. The setup was: jack_midi_latency_test -> JACK -> jack_umidi -> USB -> MIDI out -> loop cable -> MIDI in -> USB -> jack_umidi -> JACK -> jack_midi_latency_test ... and the same with alsa-seq-server and a2jmidid instead of jack_umidi. Findings: - JACK processes MIDI in the same cycles (period) as audio. - The smaller the JACK period setting, the lower the latency. - Latency correction values set by JACK OSS backend are ignored. - alsa-seq-server and a2jmidid add noticeable latency vs. jack_umidi. For example a period of 384@48kHz (8ms) with jack_umidi reports Reported out-port latency: 0.00-0.00 ms (0-0 frames) Reported in-port latency: 0.00-0.00 ms (0-0 frames) Average latency: 11.93 ms (572.41 frames) Lowest latency: 8.02 ms (385 frames) Highest latency: 16.00 ms (768 frames) Peak MIDI jitter: 7.98 ms (383 frames) Average MIDI jitter: 1.99 ms (95.13 frames) whereas with alsa-seq-server and a2jmidid it is Reported out-port latency: 0.00-0.00 ms (0-0 frames) Reported in-port latency: 0.00-0.00 ms (0-0 frames) Average latency: 18.93 ms (908.83 frames) Lowest latency: 18.04 ms (866 frames) Highest latency: 21.81 ms (1047 frames) Peak MIDI jitter: 3.77 ms (181 frames) Average MIDI jitter: 0.29 ms (13.50 frames) which means it adds 7ms roundtrip latency on average. For 192@48kHz (4ms) we get Reported out-port latency: 0.00-0.00 ms (0-0 frames) Reported in-port latency: 0.00-0.00 ms (0-0 frames) Average latency: 5.97 ms (286.44 frames) Lowest latency: 4.02 ms (193 frames) Highest latency: 8.00 ms (384 frames) Peak MIDI jitter: 3.98 ms (191 frames) Average MIDI jitter: 1.00 ms (47.32 frames) versus Reported out-port latency: 0.00-0.00 ms (0-0 frames) Reported in-port latency: 0.00-0.00 ms (0-0 frames) Average latency: 10.78 ms (517.51 frames) Lowest latency: 10.00 ms (480 frames) Highest latency: 13.46 ms (646 frames) Peak MIDI jitter: 3.46 ms (166 frames) Average MIDI jitter: 0.27 ms (12.53 frames) which is a plus of ~5ms roundtrip latency on average. Please note that using jack_umidi, the latency values are spread uniformly between 1 and 2 periods, whereas alsa-seq-server produces more like a gaussian cut at the lowest latency. Conclusions: - For live playing, jack_umidi and small JACK period are preferable. - We have no way yet to adjust the MIDI latency to audio latency. - "Reported out-port latency" suggests possible latency correction values. - It may still be worth looking into the JACK ALSA MIDI backend for this. @HPS: Any ideas about the latency introduced by alsa-seq-server / CUSE? @Anyone else: What are your MIDI use cases where latency matters? Regards, Florian
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5113897.hZNMGjoUbN>