[asoundrc] "lossless" format conversion without any rate conversion?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello all,

I've been scratching my head over this for a few hours, looking
through forums, docs, and finally the alsa-lib git repository's C code
to try to find the answer to my question, but, alas, I feel that I may
need to ask for your help.

Will any sample rate conversions occur with this .asoundrc config?

pcm_slave.force_24_bit_no_rate_convert {
        pcm "hw:0,0"
        format S24_3LE # Or other 24-bit format
        rate "unchanged" # Necessary?
}

pcm.my_new_default {
        type plug
        slave force_24_bit_no_rate_convert
}

(apologies if formatting got garbled)

Specifically, does sample rate conversion still occur anywhere in the
signal chain even though I provided the "unchanged" string for rate?

I would like to create a configuration to force digital audio output
from my PC (Arch Linux - ALSA only, no Pulseaudio) to remain at or be
converted to 24-bit format without any sample rate conversion. I
understand that the word, "lossless," in the title may be a bit of a
misnomer, since quantization noise from quantization errors during bit
depth conversion will raise the noise floor of the signal by a small
(and probably inaudible) amount, but my primary concern is avoiding
any sample rate conversions in the entirety of the signal path. And to
be clear, here, I only ever use one sound source on my PC at a time,
so I will never mix any sound sources together. Currently, my setup
involves exclusive hardware access any time I want to use my sound
card (external USB DAC), resulting in no format or rate conversion at
all (i.e. a "bit-perfect" signal). My rationale for desiring format
conversion - and only format conversion - is at the bottom of this
email.

The only thing I can find online is people wanting to either reduce
their bit depth or change their sampling rate; I haven't been able to
find a post/thread describing my situation. And the most I could
gather from the docs was that ALSA handles conversion "automagically",
but I couldn't get more details past that. Finally, looking at the
code and trying to grep directory trees recursively for the string,
"unchanged", to see if I can get any leads, I got lost in the behemoth
of a code base (which is not a bad thing! I'm just trying to convey a
sense of being overwhelmed).

Rationale:
Many of the world's most well-known label's mastering engineers aim to
produce a final product with the sample peaks not above 0dB in order
to attempt to avoid clipping. In theory (particularly, according to
the Nyquist theorem), the original bandwidth-limited analogue signal
can be perfectly and losslessly reconstructed from this digital signal
(assuming negligible quantization noise). However, the "true" peaks in
the original analogue signal between samples may actually be above 0dB
(which is why, in these cases, if you change the sample rate, you will
very likely - and in the case of upsampling, are guaranteed to - clip
the signal). Nevertheless, with a well-designed DAC that has
sufficient headroom above 0dB to account for these >0dB intersample
peaks, the original signal can still be perfectly reconstructed. The
only thing is, it seems that the only DACs that have the headroom for
this are extremely expensive $1600+ dedicated DACs. Most DACs would
fail to be able to upsample above 0dB or be able to produce an
analogue signal above 0dB, resulting in clipping of the signal. For a
16-bit, 44.1kHz signal, the worst-case frequency is 11kHz, and,
quoting from a paper on this, "... a low-level burst of noise
splatters across the audio spectrum with the bulk of the energy
concentrated in the higher frequencies. These short transient bursts
occur at every inter-sample over, and they can become audible if the
recording has enough of these overs. These bursts tend to create a
false percussive brightness in the high end." The reason any of this
happened in the first place is probably because of a disconnect
between DAC designers and mastering engineers, as well as the
"loudness wars", pushing most record labels ever closer to 0dB.

Since I don't currently have the budget for one of these $1600+ DACs,
I would like to mitigate the issue through software. The idea goes
like this: Take any signal on my PC (e.g. 16-bit, 44.1 kHz), convert
it to a 24-bit format without sample rate conversion, attenuate the
signal by 3.5-5dB to bring the intersample peaks to or below 0dB
(a.k.a. turn down the volume), and then finally send the signal to the
DAC. It is important to follow these steps in order. The conversion to
24-bit format is to mitigate dynamic range loss when changing the
digital volume.

TL;DR: Want to avoid clipping.

Thanks,
Vincent

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Alsa-user mailing list
Alsa-user@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-user



[Index of Archives]     [ALSA Devel]     [Linux Audio Users]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]

  Powered by Linux