Gale Andrews wrote:OK, but if so what is wrong with the rounding down, or for all we know so far, rounding towards zero, that happens now?
Having thought a bit more about the issue of rounding, rounding down (or up) will introduce a small (extremely small) DC offset. Although insignificant for practical purposes, that should not really happen. Rounding toward zero will cause a minute reduction in amplitude and rounding away from zero will create an equally small increase in amplitude. Rounding to the nearest value will produce the closest match with the original (which I think is what happens when converting to 16 bit without dither).
Converting from a higher bit format to a lower one must involve some form of rounding - the problem is those cases when dither is not being applied on export when converting from 32 bit float down to 24 bit when dither is enabled in Preferences.
In the tests below a 440 Hz sine wave is generated in 32-bit float, then a duplicate made. The original is inverted so that it can be used to "cancel out" the sine wave from the duplicate and so reveal any changes to the duplicate. For the 16 bit tests the mix of the two tracks is amplified by 50 dB so that the difference shows up clearly on the spectrum plot. For the 24 bit tests the mix has been amplified by 100 dB.
Test 1
The duplicate is converted to 16 bit without dither. The noise we see here is characteristic of quantize errors. Note that in the mid-range there are peaks up to about -75 dB.

- 16-bit_quantize.png (42.33 KiB) Viewed 792 times
Test 2
This image shows shaped dither noise when converting from 32 bit float down to 16 bit. Note that for frequencies below 4 kHz the noise floor is around -90 dB, so the noise in the region that hearing is most sensitive, the noise level is actually a lot lower than without dither.

- 16-bit_dither.png (41.07 KiB) Viewed 792 times
Test 3
The duplicate is converted to 24 bit without dither. The noise we see here is characteristic of quantize errors, but we have an extra peak at 440 Hz (because rounding is not going to closest value the inverted sine does not quite match the sine component of track 2). The extra peak at 440 Hz shows up more clearly with a small FFT size (second image). Looking at the first image we see a noise level in the mid range of about -75 dB.

- 24-bit_quantize.png (44.15 KiB) Viewed 792 times

- 24-bit_quantize-smaller_FFT.png (35.56 KiB) Viewed 792 times
Test 4
Here we see the 24 bit sine wave correctly dithered (shaped dither). The noise level in the mid range is below -85 dB. This is what we should get when exporting from a 32 bit float track to a 24 bit file but we don't - we get the same results as test 3.

- 24-bit_dither.png (40.23 KiB) Viewed 792 times