Max For Live - Bit Depth, Truncation & Dithering
Hello world,
I know gen~ runs at 64bit in Max and I know that Ableton Live does all its effect processing at 32bit (mixer runs at 64bit). What I don't know is what happens when your doing processing at 64bit inside a max for live device... my experience suggests that it just truncates the output to 32bit - is this correct?
Is it worth adding 32bit dither inside gen~ knowing that its going to be truncated when used in M4L?
Thx 😊
Hi Robert,
In short, it's not worth adding dither inside gen~ if you're worried about losing information when converting from 64-bit to 32-bit.
For the dither-curious, here's more info:
Nigel Redmon has a great blog post on the EarLevel Engineering site about dither: https://www.earlevel.com/main/1996/10/20/what-is-dither/
Quoting his last paragraph, emphasis mine:
"If we use high enough resolution, dither becomes unnecessary. For audio, this means 24 bits (or 32-bit floating point). At that point, the dynamic range is such that the least-significant bit is equivalent to the amplitude of noise at the atomic level—no sense going further. Audio digital signal processors usually work at this resolution, so they can do their intermediate calculations without fear of significant errors, and dither only when its time to deliver the result as 16-bit values. (That’s OK, since there aren’t any 24-bit accurate A/D convertors to record with. We could compute a 24-bit accurate waveform, but there are no 24-bit D/A convertors to play it back on either! Still, a 24-bit system would be great because we could do all the processing and editing we want, then dither only when we want to hear it.)"
Dan Worrall also has an in-depth explanation of dithering in general. (An amazing channel for those who haven't checked it out before.) The video talks at one point about how dithering is only necessary at the very last processing stage.
dithering is a process for creating 16 bit masters. where "master" means that the data is never changed again afterwards (e.g. by compression).
today it should be just banned from any audio software, its ubiquitous presence only misleads people from thinking they should use it.
Thanks for your in-depth replay Isabel. I've actually read/seen both of those yet my question persists...
I believe that you ported all of Chris Johnstone's (airwindows) work to Max externals which include his 32bit dither... Also, Nigel still suggests that there is a difference albiet small and Laurent De Soras suggests using noise to avoid denormal numbers (quantization errors) in filters which can be read here: http://ldesoras.free.fr/doc/articles/denormal-en.pdf
From my own experience I've noticed an improvement in the sonic quality of my codebox patchers by using dither that spans the last 32 bits which is truncated at the output of my device so it does not persist throughout the users signal chain.
Perhaps im encountering/experiencing a different issue but I assume that its all just quantisation errors (the rounding of numbers)...
Hi Robert,
I believe that you ported all of Chris Johnstone's (airwindows) work to Max externals which include his 32bit dither...
Yep! There wasn't any deep reasoning behind that on my part; I just wanted to keep the internal workings the same as the airwindows plugins.
It's true that there is a small difference -- from what I understand, though, if you're truncating a 64-bit double to a 32-bit float, the quantization error at that precision is at something like -144dB. So specifically at that level, some people like Nigel argue it's not worth it. Other people (mentioned in comments on the blog post) do it because it's cheap to dither, so why not?
So if you're getting results you like better after applying dither to your output, there shouldn't really be any problems doing that. It's surprising that there is an audible difference, but I'm not enough an expert to have a hypothesis as to why.