When streaming an audio data of 32bit to a 24bit capable soundcard via ASIO, how does the hardware/drivers handle it? Are the excess bits truncated or dithered?
(I use ESI Juli@ souncard)
http://en.wikipedia.org/wiki/Digital-to-analog_converter (http://en.wikipedia.org/wiki/Digital-to-analog_converter)
Noise is ultimately limited by the thermal noise generated by passive components such as resistors. For audio applications and in room temperatures, such noise is usually a little less than 1 μV (microvolt) of white noise. This limits performance to less than 20~21 bits even in 24-bit DACs.
Do you know if the 32 bit data is integer or float? In either case I would suspect that the values are either truncated or rounded, as dither at the 24 bit level is quite unnecessary.
http://en.wikipedia.org/wiki/Digital-to-analog_converter (http://en.wikipedia.org/wiki/Digital-to-analog_converter)
The OP was asking about audio streamed over ASIO, which does not involve conversion to analogue at any point.
>> 8
http://en.wikipedia.org/wiki/Digital-to-analog_converter (http://en.wikipedia.org/wiki/Digital-to-analog_converter)
The OP was asking about audio streamed over ASIO, which does not involve conversion to analogue at any point.
I think that IgorC was just trying to point out that it doesn't matter how you get from 32 to 24 bits because the DAC noise will swamp any differences.
I think that IgorC was just trying to point out that it doesn't matter how you get from 32 to 24 bits because the DAC noise will swamp any differences.
OK, but that should be made clear, and anyway, that fact doesn’t negate the original question on a technical level.
>> 8
An even more abstract post, which, for readers not privy to the arithmetical operators of C and C++, represents a calculation that shifts an input number 8 bits to the right, discarding each least significant bit that is pushed out.
I suppose the details are up to the programmer, but I'd assume that it's usually the equivalent of truncation. (And, values that go over 0dB are normally clipped.(
32-bit is normaly floating point and 24-bit is normally integer. The waveform is represented/calibrated differently and it's not as simple as truncating "extra bits". With floating point, some bits are used for the mantissa and some bits are used for the exponent.
With 32-bit floating-point, 0dB is "calibrated" as +/-1.0, which means that unless you go over 0dB, the values are always fractional values less than (or equal to) one.
With 24-bit integer, 0dB is +8,388,352 or -8,388,353 and of course integers can never be fractional values.
With 24-bit integer, 0dB is +8,388,352 or -8,388,353 and of course integers can never be fractional values.
Wouldn't that be -8388608 to 8388607?
When streaming an audio data of 32bit to a 24bit capable soundcard via ASIO, how does the hardware/drivers handle it? Are the excess bits truncated or dithered?
(I use ESI Juli@ souncard)
Juli uses Envy24 which communicates with the PC (DMA to/from RAM) in S32_LE i.e. signed int 32 bits. On the I2S side (codecs) it outputs signed int 24 bits. It just truncates one byte, no dither (which makes perfect sense).
With 24-bit integer, 0dB is +8,388,352 or -8,388,353 and of course integers can never be fractional values.
Wouldn't that be -8388608 to 8388607?
I guess I goofed-up my calculations... Somewhere around 8 million seemed about right... I forgot to use my usual procedure- "Calculate twice and take an average"
When streaming an audio data of 32bit to a 24bit capable soundcard via ASIO, how does the hardware/drivers handle it? Are the excess bits truncated or dithered?
(I use ESI Juli@ souncard)
This question has only intellectual value, because in the real world it all sounds the same whether the conversion is raw truncation, dithered or rounded.
The answer is that how this is done in any particular case is application-dependent. You'd have to read the software source code or have someone do it for you.
See related thread...
http://www.hydrogenaudio.org/forums/index....c=99259&hl= (http://www.hydrogenaudio.org/forums/index.php?showtopic=99259&hl=)
Simple right shift results in tiny negative DC offset, but this can be easily killed by the following (this is equivalent to adding 0.5 on float->int rounding):
(sample + 128) >> 8
However, as a result of addition, the resulting value can exceed maximum value in the target bits.
Therefore, some kind of saturated arithmetic (clipping) is required.
Thanks for all the help and information.
http://en.wikipedia.org/wiki/Digital-to-analog_converter (http://en.wikipedia.org/wiki/Digital-to-analog_converter)
Noise is ultimately limited by the thermal noise generated by passive components such as resistors. For audio applications and in room temperatures, such noise is usually a little less than 1 ?V (microvolt) of white noise. This limits performance to less than 20~21 bits even in 24-bit DACs.
Theoretically then , would it be best to dither audio stream to 20-21 bits , depending on the noise floor of the specific audio hardware?
Thanks for all the help and information.
http://en.wikipedia.org/wiki/Digital-to-analog_converter (http://en.wikipedia.org/wiki/Digital-to-analog_converter)
Noise is ultimately limited by the thermal noise generated by passive components such as resistors. For audio applications and in room temperatures, such noise is usually a little less than 1 ?V (microvolt) of white noise. This limits performance to less than 20~21 bits even in 24-bit DACs.
Theoretically then , would it be best to dither audio stream to 20-21 bits , depending on the noise floor of the specific audio hardware?
If you are limited by thermal noise, adding more noise doesn't do anything except make the signal more noisy.
I guess that is why dither is recommended for decimation down to 16 bits, not 24 bits. And that is why envy24 just truncates the 32bit DMA input sample to 24bit for I2S without any shame
Thanks for all the help and information.
http://en.wikipedia.org/wiki/Digital-to-analog_converter (http://en.wikipedia.org/wiki/Digital-to-analog_converter)
Noise is ultimately limited by the thermal noise generated by passive components such as resistors. For audio applications and in room temperatures, such noise is usually a little less than 1 ?V (microvolt) of white noise. This limits performance to less than 20~21 bits even in 24-bit DACs.
Theoretically then , would it be best to dither audio stream to 20-21 bits , depending on the noise floor of the specific audio hardware?
If you are limited by thermal noise, adding more noise doesn't do anything except make the signal more noisy.
If thermal noise of hardware masks low level data from , let's say, the 21th bit and higher, digital dither could add noise at 20th bit and rescue some micro-detail before it is masked and lost. Isn't this correct?
I'm afraid that you are completely missing the point of dither.
Dither does not improve existing sound. What it does is make the noise that is added by downsampling less objectionable by making it less correlated to the signal.
If you have noise at the 21 bit level and you are going to downsample to 16 bits then you dither. If you are only downsampling to 20 bits then dither is questionable. If you are going to play the 24 bit data intact then the 21 bit noise that is present is already uncorrelated with the signal so adding more uncorrelated noise will only make it noisier.
Thanks for all the help and information.
http://en.wikipedia.org/wiki/Digital-to-analog_converter (http://en.wikipedia.org/wiki/Digital-to-analog_converter)
Noise is ultimately limited by the thermal noise generated by passive components such as resistors. For audio applications and in room temperatures, such noise is usually a little less than 1 ?V (microvolt) of white noise. This limits performance to less than 20~21 bits even in 24-bit DACs.
Theoretically then , would it be best to dither audio stream to 20-21 bits , depending on the noise floor of the specific audio hardware?
If you are limited by thermal noise, adding more noise doesn't do anything except make the signal more noisy.
If thermal noise of hardware masks low level data from , let's say, the 21th bit and higher, digital dither could add noise at 20th bit and rescue some micro-detail before it is masked and lost. Isn't this correct?
This is a moot conversation because AFAIK there are no real-world recordings with a noise floor that is even 16 bits down. Typical is around 12 bits, and SOTA is 14 bits.
Thermal and acoustical noise do a fine job of dithering, they just need to be a bit (figuratively) larger than optimally shaped TPDF dither.
The worst case program material for bit reduction is digital black. You always scale your dither to deal with just that. IOW about 1 LSB at the reduced word length.
There is a line of thought that goes like this - I've got 24 bit data but I'm worried that it is going to be converted to 16 bits without dither so I'll add the right amount of dither to cover that eventuality. This may sound stupid but in the real world it does no harm because the noise floor of the program material is always even worse than that!