Professional Documents
Culture Documents
software (blog/tags/software)
Updates:
• 2020-12-21 Add Ubuntu 20.04.1 LTS and RT audio info; some tidying up.
• 2020-08-31 Add note about xed duplex sound support.
• 2020-06-06 Add note about systemd and realtime audio.
• 2020-04-13 Add more Linux compatibility tests and notes.
• 2020-03-31 Add note about switching the sample rate.
Motu M4 review
With measurements and Linux notes
I updated my computer (site/posts/2020-02-02_motu_m4/../../../posts/2021-04-05_updating_pc)
at the end of year 2019. As new motherboards don't have a PCI bus anymore, I had to give up my
ESI Juli@ and look for a replacement. Motu had just released the M2 and M4 USB audio interfaces
in November. They seemed to o er superb sound quality in a nice package. I wanted a device
which is class-compliant and bus-powered, and the M4 t the bill nicely. It took quite a few weeks
for the device to arrive, as apparently it's been hugely popular. No wonder why, as you'll soon nd
out. In this review I skip microphone recording tests, as there are already many review videos on
YouTube addressing that speci c area. This review is more about the outputs and Linux
compatibility.
The Motu M4 front panel. All the knobs feel really nice and sturdy.
(site/posts/2020-02-02_motu_m4/motu_m4.jpg)
A very nice thing about digitally controlled volume is that the channel balance and frequency
response are not volume-dependent. As my Klipsch RF-63 loudspeakers have a sensitivity of 99 dB
@ 2.83 V / 1 m, it is critical to have a very high-quality volume potentiometer. The Motu M4 provides
one.
Measurements
Even though I use the device almost exclusively in Linux, for measuring I booted my PC to
Microsoft Windows 10 Pro. The measurement software I used was ARTA version 1.9.3 Update 1 by
Artalabs (http://www.artalabs.hr/).
Setup
The calibration was done using a voltmeter between the balanced
connection tip and sleeve.
(site/posts/2020-02-02_motu_m4/setup_calibration.png)
For a rst-timer in ARTA software, the amount of things hidden behind option dialogs can be a bit
confusing. I checked the voltmeter values from the balanced line out connection between the tip
and sleeve. I didn't calibrate per-channel, but assumed they are identical, as they should be.
In the Audio Devices Setup dialog I selected the 24-bit Wave Format for all the measurements,
unless otherwise mentioned. Note: I was using the WDM drivers as ARTA didn't work correctly with
the special drivers in all situations. I made sure the Windows mixer wasn't doing anything stupid in
the background, though, by setting all the Windows settings to 44100 Hz, 24-bit with volume levels
maxed out.
In the Generator Setup for Continuous Signals dialog I had the default Dither Level of 16-bit and
signal level of -3 dBFS. For the nal, best THD+N measurement I selected 20-bit Dither Level (which
gives results identical to no dither at all) and pumped up the signal level to -1 dBFS.
For other dialog settings I used the defaults. All the main window settings (such as FFT length and
window function) are visible in the screenshots.
Cable setups
I tried a bunch of di erent cables both for balanced and unbalanced connections. For balanced
connection I had one self-made short cable with the Cordial CMK 222, a couple of longer self-
made ones with the Sommercable Goblin, and a couple of cheap sssnakes from Thomann. They all
had similar results and therefore I guess my cables are good enough.
These three di erent cables yielded practically
identical results.
(site/posts/2020-02-02_motu_m4/interconnect_cables.jpg)
(site/posts/2020-02-02_motu_m4/results_bal_out_bal_in_16bit.png)
Balanced out to line in. 16-bit Wave Format.
02_motu_m4/results_bal_out_bal_in_24bit.png)
Moving up to 24-bit Wave Format the harmonics become visible from the noise, along with THD+N
dropping from 0.0046 % to 0.0018 %, or -95 dB approximately.
There's only very little quality
loss when using the
unbalanced out, connecting
just the tip and sleeve of the
balanced in TRS connector.
THD+N is about -93.5 dB.
I was wondering about the -95
dB THD+N gure of the
balanced loopback
measurement but then I
realized I was using 16-bit
Dither Level. Selecting 20-bit
Unbalanced RCA out to line in.
dithering and raising the signal
level to -1 dBFS from the (site/posts/2020-02-02_motu_m4/results_rca_out_bal_in.png)
default -3 dBFS, I measured a
THD of 0.00050 % and a THD+N of 0.00069 %. These are roughly equal to -106 dB and -103 dB
respectively. Considering there's both a DAC and an ADC (with a THD+N of -106 dB), the measured
values are very close to the theoretical limits of the specs and thus extremely good.
When monitoring is on, with
the input monitor mix
potentiometer set exactly to
middle (12:00 o'clock), THD+N
rises 1 dB. I think it's safe to say
that monitoring has no e ect
on the sound quality.
Frequency response
While measuring the frequency response I had the unbalanced RCA monitor outputs connected to
the line inputs. The frequency response was extremely at.
(site/posts/2020-02-02_motu_m4/results_fr_max_vol_rca_bal.png)
(site/posts/2020-02-
(site/posts/2020-02-02_motu_m4/results_fr_max_vol_rca_bal.png)
Frequency response is extremely at. Monitor volume set to
max.
Frequency response stays at with lower volume levels.
Monitor and input mix volumes set to midway (12:00 o'clock).
02_motu_m4/results_fr_mid_vol_rca_bal.png)
I also tested how the frequency response behaved if setting the monitor output levels to something
much lower volume. With both the main monitor volume and input monitor mix volume set at 12:00
o'clock, there was hardly any di erence. If the signal level is anything greater than about -60 dbFS,
the frequency response stays practically at, i.e. easily within +-0.2 dBFS between 10 Hz and 20 kHz.
I also checked the channel balance at low volume levels. It was practically perfect as was
expected, only a 0.25 % di erence could be distinguished.
Latency
An important thing for music producers, especially if you are playing any instrument via your PC,
the less latency there is, the better.
I measured latency in Linux using JACK (https://jackaudio.org/) and Audacity
(https://www.audacityteam.org/). I chose the best values I deemed stable with 96000 Hz sampling
rate: 64 frames per period, 6 periods per bu er. In theory, this will yield an input latency of 64/96000
s = 0.67 ms and an output latency six times that, or 4 ms .
I created a short square-wave signal which I then played out via the line out and looped it back into
the line in.
The delay between playback starting and the rst non-zero recorded value
was 6.49 ms, or approximately 6.5 ms.
(site/posts/2020-02-02_motu_m4/results_latency.png)
Measuring from the recorded result the Round Trip Latency (RTL) at 96 kHz is 6.5 ms, which I think,
for a class-compliant USB audio interface with no special drivers at all, is amazing. This means that
the latency from USB bus and M4 internals combined is around 1.83 ms, which sounds about right
for a USB device.
Now, if we took that 1.83 ms as a reference and added to that twice (for output and input) a bu er of
32 samples at 96 kHz, or 0.33 ms, we'd have an RTL of exactly 2.5 ms. That is the RTL that Motu
advertises when using the special Windows or Mac drivers, and seems very plausible. With JACK
the output latency is always bigger than the input latency and so the RTL is a bit higher also.
For 48 kHz operation, I managed to get a stable 12.5 ms RTL. The smallest latencies I was able to
achieve using JACK, in theory, was at 192000 Hz with 64 frames per period, 7 periods per bu er.
This resulted in an RTL of 4.5 ms at 192 kHz, but I did not test how stable this would be in the long
run. While trying out di erent settings, any smaller latency and JACK would just output XRuns
(bu er overruns or underruns) constantly. Nevertheless, these are extremely small numbers. You
might have 99 problems while recording, but with the M4 latency ain't one.
For comparison
I have an old dedicated DAC which I now keep connected to the monitor inputs of the M4. That way
I can keep the M4 a dedicated soundcard for Hi-Fi use. The device in question is the Pop Pulse
Super Pro 707 24-bit/192kHz DAC (http://www.itemaudio.co.uk/superpro_dac.html). It uses the
Cirrus Logic CS-4398 (https://www.cirrus.com/products/cs4398/) DAC chip, which has very good
speci cations, including a THD+N of -107 dB.
The DAC sounds very good and has hardly any
audible noise. What's funny are the
measurements. First I connected the outputs of
the 707 to the inputs of the M4. The THD+N
gures were orders of magnitude greater
immediately (over -80 dBFS), but there's no way
even these could be heard, at least not with the
noisy ampli er I have at the moment. I also did
an extra loopback run so that the signal rst
went from 707 to M4, then from M4 to itself via
monitoring. The THD rose a mere 0.32 dB, and
THD+N 0.76 dB. Those are such small numbers
I'm pretty sure they might be gone on a
di erent day and room temperature. That's how
clean the M4 is.
(site/posts/2020-02-
02_motu_m4/results_707_out_bal_in.png)
(site/posts/2020-02-
02_motu_m4/results_707_out_bal_in_loop.png)
(site/posts/2020-02-02_motu_m4/results_707_out_bal_in.png)
Super Pro 707 DAC to M4.
@audio - rtprio 70
@audio - memlock 16777216
@audio - nice -10
I've also set up sudoers so that I may renice processes without a password. Now, when my user is
in the audio group, I can start an audio application and renice it to have high priority. Without giving
those security limits for PAM, JACK complains if you try to run it in realtime mode. 2020-06-06 note:
according to JACK documentation (https://jackaudio.org/faq/linux_rt_con g.html), the niceness
has no e ect on realtime audio.
To see processes started by you and having RT priority, use $ ps -LeO rtprio (from the
comments: -L , the show threads switch, is usually needed to see the RT priorities). I am also using
rncbc's rtirq script (https://github.com/rncbc/rtirq), but I have no idea whether it has any e ect
without the RT kernel.
In any case, with the above set up, after starting JACK and renicing it to -10, I get realtime audio
with low latencies. I try to test all setups for XRuns before actually using them. Take for example the
setup I got the 96000 Hz low-latency result with. I left it running overnight, with mhWaveEdit
(https://github.com/magnush/mhwaveedit) listening to inputs, and an ALSA/JACK bridge routing
music from a media player to the outputs. In a real recording situation the loads might be very
di erent, but at least there was some data moving.
I've tested these three JACK setups and
they work very nicely:
Conclusion
I've been super satis ed with the new computer I assembled. The one part that felt troublesome to
nd was a new, a ordable audio interface. Luckily Motu had just released the M4. The only thing I
would love to have is a digital input. Other than that, I couldn't wish for more from the M4.
Pros:
Feels well-built.
Class-compliant operation, so works in Linux.
Powered by USB bus.
Extremely good speci cations.
The speci cations also deliver in practice.
The potentiometers a ect digitally so there's no quality loss, but they have analog knobs so
they still feel nice.
Very low latency for a USB device.
Cons:
Any chance of adding a digital input?
Would be nice to have two stereo devices instead of one 4-channel device, but I'm not sure if
it would be class-compliant anymore.
Manufacturer apparently has little history with Linux, so some details are kind of hard to nd. I
hope this review article clears things out for other Linux users out there.
Update 2020-08-31: Full-duplex with Linux requires JACK before kernel 5.8, but works
normally nowadays. See the xing commit
(https://github.com/torvalds/linux/commit/10ce77e4817fef99e1166be7e6685a80c63bf77f#di -
aba21fac395f457b2f223b8f36e4bde1).
If you need an audio interface, just buy the Motu M4 or M2.
This Moroccan sunset has nothing to do with anything, I just wanted a separator for the article
update. 😁
(site/posts/2020-02-02_motu_m4/sunset_silhouette.jpg)
Assuming you don't have any other sound server running, you should have test tones playing via
your device. So the device works, but full-duplex doesn't. The solution is to use JACK for duplex
mode. See the next section.
Also note that, even though you might not be getting any output at all, the input does work all the
time. You can even see the input level monitor in PulseAudio volume control working normally.
This might also explain why I wasn't able to get ARTA working without the WDM driver during my
initial tests. It might well be that the same thing that's preventing full-duplex mode from working in
Linux actually also a ects Windows when the device is in exclusive mode without WDM driver, but
I can't tell for sure.
Searching a bit I found similar reports and debugging instructions, none of which helped. Then I
came across this Fedora bug report (https://bugzilla.redhat.com/show_bug.cgi?id=1364332)
about systemd not respecting the security limits. The bug report is already almost four years old,
starting with Fedora 26. At the end of the discussion there's a link to a similar report for Fedora
29, and in that report the latest post at the moment is some guy wondering about how things
still don't work with Fedora 32. One person suggested creating a systemd service
(https://bugzilla.redhat.com/show_bug.cgi?id=1364332#c43) for JACK and setting the limits
there. I tried - it didn't work. Even if this would work with you, it would prevent a lot of audio-
related scripting.
I've always had trouble with systemd. That's one of the reasons I still use Gentoo on my main rig:
it uses OpenRC which feels very stable and adheres to the Unix philosophy. If you're having
trouble with realtime audio and other things (*cough*snap*cough*) with newer Ubuntus or other
systemd-based distros, maybe give an OpenRC-based distro a try.
Now, in December, I took another look on why the realtime audio wasn't working with my Xubuntu.
Turns out the error was quite silly: at some point I (or a script, but it was probably me) had made a
typo in my groups le and my user was not in the audio group anymore. In limits.conf I am giving
realtime rights to people in audio group, and hence couldn't run stu realtime. After xing it,
everything works - systemd was not the culprit. I also tested full-duplex (and PulseAudio) quickly
with a newer kernel, and it works.
To get full-duplex audio working on Ubuntu 20.04.1 LTS, get a kernel release newer than 5.8, e.g.
5.9.12 (https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9.12/):
1. install linux-headers-..._all.deb (in terminal: sudo dpkg -i package.deb)
2. install generic headers
3. install generic modules
4. install generic image
5. run in terminal: sudo update-grub (this will add the new kernel to your boot options)
Note: for realtime audio, the low-latency kernel is not required, the generic one works ne. After
rebooting, typing ulimit -r in terminal should show the realtime priority limit set in limits.conf .
Also a word of warning: new kernels might always lead to strange problems. On my old laptop the
system refused to boot unless I disabled microcode loading with kernel parameter dis_ucode_ldr .
▲
(https://www.facebook.com/sharer/sharer.php?u=https://panther.kapsi. /posts/2020-02-
02_motu_m4&t=) (https://twitter.com/intent/tweet?source=https://panther.kapsi. /posts/2020-
02-02_motu_m4&text=:%20https://panther.kapsi. /posts/2020-02-02_motu_m4)
(http://wordpress.com/press-this.php?u=https://panther.kapsi. /posts/2020-02-
p p p p p p p p p
02_motu_m4&t=&s=) (mailto:?subject=&body=https://panther.kapsi. /posts/2020-02-
02_motu_m4)
4 review: With measurements an for the AKG K701 headphones: and LDAC
LOG IN WITH
OR SIGN UP WITH DISQUS ?
Name
Thanks again for the very detailed review and the tricks
about the Linux settings.
△ ▽ • Reply • Share ›
cat daemon.conf
△ ▽ • Reply • Share ›
#!/bin/bash
[ "root" != "$USER" ] && exec sudo $0 "$@"
△ ▽ • Reply • Share ›
192/2/64 = ( 64 / 192000 ) * 2 *
1000 == 0.6666666667ms . I want
to believe it but the math doesn't
work; that'd be directly out
preforming RME's 900USD PCI-E
cards (0.7ms/buffer) and omitting
the USB2.0 stack requires
125 / k tf l ti
see more
△ ▽ • Reply • Share ›
▲
If everything is working as expected with the Motu I