From nobody Sun Feb 27 17:45:40 2022 X-Original-To: freebsd-multimedia@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 7C76B19F79BE for ; Sun, 27 Feb 2022 17:45:52 +0000 (UTC) (envelope-from dev@submerge.ch) Received: from c3po.matrixx.ch (c3po.matrixx.ch [80.74.145.109]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4K69sW353qz3JgR for ; Sun, 27 Feb 2022 17:45:51 +0000 (UTC) (envelope-from dev@submerge.ch) Received: from [145.40.196.39] (port=39279 helo=z800.localnet) by c3po.matrixx.ch with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.91) (envelope-from ) id 1nONc4-0007Pp-Kq; Sun, 27 Feb 2022 18:45:41 +0100 From: Florian Walpen To: freebsd-multimedia@freebsd.org Cc: Hans Petter Selasky Subject: Re: New FreeBSD port ALSA to JACK MIDI, a2jmidid Date: Sun, 27 Feb 2022 18:45:40 +0100 Message-ID: <5113897.hZNMGjoUbN@z800> In-Reply-To: <50bd092c-9d5e-645d-2e5a-16a92d83a0db@selasky.org> References: <22854640.gYbqZ1YImA@z800> <50bd092c-9d5e-645d-2e5a-16a92d83a0db@selasky.org> List-Id: Multimedia discussions List-Archive: https://lists.freebsd.org/archives/freebsd-multimedia List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-multimedia@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-OutGoing-Spam-Status: No, score=-1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - c3po.matrixx.ch X-AntiAbuse: Original Domain - freebsd.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - submerge.ch X-Get-Message-Sender-Via: c3po.matrixx.ch: authenticated_id: fw@submerge.ch X-Authenticated-Sender: c3po.matrixx.ch: fw@submerge.ch X-Source: X-Source-Args: X-Source-Dir: X-Rspamd-Queue-Id: 4K69sW353qz3JgR X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of dev@submerge.ch designates 80.74.145.109 as permitted sender) smtp.mailfrom=dev@submerge.ch X-Spamd-Result: default: False [-2.10 / 15.00]; RCVD_TLS_ALL(0.00)[]; CTE_CASE(0.50)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+a]; HAS_X_SOURCE(0.00)[]; MIME_GOOD(-0.10)[text/plain]; MID_RHS_NOT_FQDN(0.50)[]; ARC_NA(0.00)[]; DMARC_NA(0.00)[submerge.ch]; NEURAL_HAM_LONG(-0.90)[-0.896]; TO_MATCH_ENVRCPT_SOME(0.00)[]; NEURAL_HAM_SHORT(-1.00)[-1.000]; RCPT_COUNT_TWO(0.00)[2]; HAS_X_GMSV(0.00)[fw@submerge.ch]; MLMMJ_DEST(0.00)[freebsd-multimedia]; NEURAL_HAM_MEDIUM(-0.91)[-0.909]; HAS_X_ANTIABUSE(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:21069, ipnet:80.74.144.0/20, country:CH]; RCVD_COUNT_TWO(0.00)[2]; HAS_X_AS(0.00)[fw@submerge.ch] X-ThisMailContainsUnwantedMimeParts: N 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