I have an USB-C audio interface called the M-Track 2x2, made by M-Audio, hooked into my computer to allow me to record audio coming in an XLR cable using Audacity. (Most often the audio coming in is a microphone, but sometimes it’s a mixer.) When I try to record anything using the M-Track, it cuts off the signal at the ±0.5 mark. I have attached a screenshot (called half.png) to illustrate what I mean here. This is true when I record on Windows, where I have Audacity 2.3.0 installed.
However, if I plug the same device into my Ubuntu/Linux computer, and record using Audacity 2.3.3, it uses the full range of the record. It does not cut off at the 0.5 mark on Linux. I have attached a screenshot (called full.png) to illustrate this as well.
Any idea why I am seeing this discrepancy? I would really like to be able to record with the full range on my Windows box. Thanks.
That’s a common issue, there’s a logical reason for it, and there are a couple of work-arounds -
First, the meters on the interface are reading on the analog levels goin into the analog-to-digital converter so those levels are “true” and if you keep the levels out of clipping everything is OK.
This happens when you use only 1 channel on a "stereo’ (2-channel) interface while recording in mono. The software is cutting both channels in half so when they are combined you don’t go over 0dB. If you have nothing going-into the 2nd channel you can only get to -6dB (50%).
The simplest solution is simply to amplify digitally after recording. It’s a good idea to leave some headroom and you’ll probably be adjusting the volume after recording anyway. (It’s a good idea to turn-down the gain on the unused channel so you don’t add noise.)
Or, you can record in stereo which will give you the full signal in both channels, and then delete the silent channel and convert to mono.
Thanks for the explanation. That’s really helpful. But I do still have some lingering questions. First, and again, why is the software behavior different on Windows vs. Linux? Is that essentially a Windows driver issue (rather than an Audacity issue)?
Secondly, Audacity is great for recording but I also want to send the audio over live streams in some cases, and in that case, that complicates your workaround of essentially processing things in post. Is there some hardware setting or cabling setup that can be done to send the signal in both channels? Or does it even matter? Forgive my ignorance here.
Sometimes the maker of the interface will provide a solution in their driver software. Any luck there? It’s not crazy talk to assume somebody is going to want to use your stereo interface for one microphone on Windows—and expect it to work.
It’s a bug in the Windows device driver. It’s such a common bug that I assume some Windows driver developers consider it to be a “feature” (intentional).
(I’ve never seen this bug / feature on Linux, only Windows.)
There could be more than one reason, but in the cases that I’ve seen, it occurs because of the way that the driver creates a mono audio stream:
On Linux, if an app requests mono, the device driver delivers the left audio channel only (“channel 1”).
On Windows, the device driver delivers a mix of left and right which is then reduced by 6.02 dB, which is (left + right) ÷ 2. Each channel is limited to a range of +/- 1 (because it is integer format audio), resulting in the mono mix being limited to +/- 0.5 when there is only one input.
The problem can usually be fixed (Windows) by ensuring that the number of channels set in the Windows Sound control panel is the same as the number of channels being recorded.
In most cases, if you set the device (in the Windows Sound control panel) to “1 channel mono”, then the device driver will deliver just the left channel (the same as occurs on Linux). If the device is set to “2 channels stereo” in the Windows Sound control panel, then you need to record 2 channels.
In most cases, if you set the device (in the Windows Sound control panel) to “1 channel mono”, then the device driver will deliver just the left channel (the same as occurs on Linux).