Fathom Synth Development Thread
-
- KVRAF
- Topic Starter
- 1579 posts since 25 Mar, 2017
Most audio values are between -1 and +1 since that is how any signal is recorded.
So any considerations of floating point precision are in that range. Errors will be slightly higher as the signal approaches one and minus one because more of the available digits must be used to store the value. The closer to zero the signal is the more accurately it can be saved.
Computation is a consideration but it is not the primary factor. The primary factor is simply storing numbers in a buffer and pulling them out. If you store numbers as floats to eight decimal places and the human ear can hear to more decimal places of precision you are going to reduce audio quality before you even do any computations.
Computations play a slight role in interpolation but interpolation is all multiply and add so again the primary consideration is simply storing the number. Keep in mind that EVERYTHING in a synthesizer results in values being pulled from a sin wave since that is the only way to generate an alias free signal. So rendering the sin wave is 99.9% of audio quality.
So computations are really sort of beside the point except for interpolation because if you compute a signal such as for detune, distortion, shifting or any other audio function and you get the result and then convert it to sin partials, if the computations are slightly off but the result is stored as doubles then errors in the computation produce a result slightly different than you intended but it will still be high quality because it is rendered with less aliasing.
Think of computations as what you are painting and digits of precision in rendering sin waves as the size of your paint brush.
I've been racking my brains for the last five years trying to figure out why the high quality synths sound better and I'm pretty sure this is it. Fathom uses the most advanced interpolation algorithm of any synth on the market so I don't think that is the issue.
So any considerations of floating point precision are in that range. Errors will be slightly higher as the signal approaches one and minus one because more of the available digits must be used to store the value. The closer to zero the signal is the more accurately it can be saved.
Computation is a consideration but it is not the primary factor. The primary factor is simply storing numbers in a buffer and pulling them out. If you store numbers as floats to eight decimal places and the human ear can hear to more decimal places of precision you are going to reduce audio quality before you even do any computations.
Computations play a slight role in interpolation but interpolation is all multiply and add so again the primary consideration is simply storing the number. Keep in mind that EVERYTHING in a synthesizer results in values being pulled from a sin wave since that is the only way to generate an alias free signal. So rendering the sin wave is 99.9% of audio quality.
So computations are really sort of beside the point except for interpolation because if you compute a signal such as for detune, distortion, shifting or any other audio function and you get the result and then convert it to sin partials, if the computations are slightly off but the result is stored as doubles then errors in the computation produce a result slightly different than you intended but it will still be high quality because it is rendered with less aliasing.
Think of computations as what you are painting and digits of precision in rendering sin waves as the size of your paint brush.
I've been racking my brains for the last five years trying to figure out why the high quality synths sound better and I'm pretty sure this is it. Fathom uses the most advanced interpolation algorithm of any synth on the market so I don't think that is the issue.
- KVRAF
- 7891 posts since 12 Feb, 2006 from Helsinki, Finland
Even 32-bit floats can store 24-bit audio exactly and it is physically implausible for a DAC to do much better than 20 bits. Medical data about human hearing doesn't come into play.FathomSynth wrote: ↑Sun Jun 27, 2021 6:15 pm Computation is a consideration but it is not the primary factor. The primary factor is simply storing numbers in a buffer and pulling them out. If you store numbers as floats to eight decimal places and the human ear can hear to more decimal places of precision you are going to reduce audio quality before you even do any computations.
Now.. I'm not going to claim 32-bit is always enough. I've written several plugins that wouldn't even work in 32-bits, because the error accumulation with some algorithms (eg. feedback, large enough FFTs) can be quite terrible... but if all you're doing storage and simple mixing of signals, then you should really be able to get the same bits out of the DAC either way.
- KVRAF
- 8828 posts since 6 Jan, 2017 from Outer Space
The big advantage of using floating point computation within a DAW is, that you can go beyond 1.0! If you just level it down before its sent to the DAC you are fine. No clipping no distortion. 32-bit floating point is a 23-bit mantissa 1-bit sign and 6-bit exponent. The resolution for a 24-bit DAC is exactly the 8-digits or 23-bit + sign of an 32-bit float. 24-bit is good for 144 dB signal to noise ratio, way beyond what we can hear… Rounding errors are simply noise and they can add up… This is relevant information for computation of 15 years ago!
Today we deal with 64-bit applications. A float calculation in a 64-bit application has a 52-bit mantissa!
In 32-bit applications we only ran into resolution problems if you wanted to access a sound file of more than 6 minutes with sample accuracy. And we had a denormal problem, when an algorithm went into unhearable soft levels like the tail of a reverb - the CPU demand goes up like crazy. All these problems don’t exist in a 64-bit application as nobody would use anything else than 64-bit floats also called double precision.
In the old times when computers had 8-bit. The compilers needed all these different types of floats to instruct the processor with complicated algorithms to do calculations in a higher resolution. Which would eat CPU for breakfast…
Today we deal with 64-bit applications. A float calculation in a 64-bit application has a 52-bit mantissa!
In 32-bit applications we only ran into resolution problems if you wanted to access a sound file of more than 6 minutes with sample accuracy. And we had a denormal problem, when an algorithm went into unhearable soft levels like the tail of a reverb - the CPU demand goes up like crazy. All these problems don’t exist in a 64-bit application as nobody would use anything else than 64-bit floats also called double precision.
In the old times when computers had 8-bit. The compilers needed all these different types of floats to instruct the processor with complicated algorithms to do calculations in a higher resolution. Which would eat CPU for breakfast…
Last edited by Tj Shredder on Tue Jun 29, 2021 6:52 am, edited 1 time in total.
- KVRAF
- 7891 posts since 12 Feb, 2006 from Helsinki, Finland
Single vs. double precision floating point has nothing to do with 32-bit vs. 64-bit applications. Denormals also have little to do with either, except as far as single-precision denormals happen before double-precision denormals, but then again many of the problems in legacy code were happening with 80-bit floating point because poor legacy x87 did not have any denormal mitigation in hardware.Tj Shredder wrote: ↑Tue Jun 29, 2021 6:49 am In 32-bit applications we only ran into resolution problems if you wanted to access a sound file of more than 6 minutes with sample accuracy. And we had a denormal problem, when an algorithm went into unhearable soft levels like the tail of a reverb - the CPU demand goes up like crazy. All these problems don’t exist in a 64-bit application as nobody would use anything else than 64-bit floats also called double precision.
Either way, there's like a dozen different things here that you're talking about that have very little to do with each other. Also I happen to know for a fact that single-precision is still used quite a bit, simply because in many cases it happens to be about twice as fast when an algorithm can use SIMD.
-
- KVRAF
- Topic Starter
- 1579 posts since 25 Mar, 2017
DAC's are limited to 20 bits. I thought most DAC's these days were 32 bits?
Also, I think that might be beside the point. If a DAC has a particular bit depth then it means that it can only detect differences in amplitude up to certain discrete levels which means when it converts the digital signal to analog voltage and sends it to the speakers there will be slight rounding errors.
But think about this logically. The DAC rounding errors are ADDED to any errors in the digital signal, they do NOT replace them. So if the VST uses double floating point and generates a digital signal with less aliasing then there will be less aliasing in the output signal from the DAC regardless of the DAC bit depth!
Furthermore, buffer fetches and calculations occur at multiple stages inside the VST and rounding errors compound, so even if it is true that there is limited precision at the output point to the DAC the equality of the signal to the DAC is massively impacted by float vs double precision even if the precision of the DAC is limited.
So maybe, I'm not understanding your point.
Also, I think that might be beside the point. If a DAC has a particular bit depth then it means that it can only detect differences in amplitude up to certain discrete levels which means when it converts the digital signal to analog voltage and sends it to the speakers there will be slight rounding errors.
But think about this logically. The DAC rounding errors are ADDED to any errors in the digital signal, they do NOT replace them. So if the VST uses double floating point and generates a digital signal with less aliasing then there will be less aliasing in the output signal from the DAC regardless of the DAC bit depth!
Furthermore, buffer fetches and calculations occur at multiple stages inside the VST and rounding errors compound, so even if it is true that there is limited precision at the output point to the DAC the equality of the signal to the DAC is massively impacted by float vs double precision even if the precision of the DAC is limited.
So maybe, I'm not understanding your point.
- KVRAF
- 7891 posts since 12 Feb, 2006 from Helsinki, Finland
The number of bits the DAC presents to the software side of things is one thing. What the DAC can physically output is another thing. So you might have a DAC that seemingly takes a 32-bit signal, but that doesn't change the physics on the analog side of things. In practice it's a bit more complicated, because your average DAC might output only a few bits and use a high oversampling rate together with noise shaping to get the equivalent of about 20 bits, but there's only so far you can go.FathomSynth wrote: ↑Tue Jun 29, 2021 3:41 pm DAC's are limited to 20 bits. I thought most DAC's these days were 32 bits?
Now, it is true that any rounding errors in a DAC might be "additive" in a sense, but at the same time when such "noise" is significantly higher than whatever errors exist in the signal, the noise will almost completely mask the lower level errors.
As for aliasing, that's mostly a matter of interpolation filters and I don't think 32-bit precision really comes into play there either, unless there is some additional numerical issue with the filters. While you can easily see the floating point rounding noise with a double-precision analyzer, it's should usually be pretty flat in terms of frequency spectrum.
That said, I want to clarify further that I'm not against using 64-bit precision at all. There are cases where the differences can be quite significant. I'm just trying to say that 32-bits isn't automatically bad and a well-designed signal path (depending on what you need to do) can produce a high-quality signal with single-precision as well, often at a significantly lower CPU cost. Likewise an algorithm that is sufficiently poor in terms of numerical precision can introduce significant errors even if you use double-precision.
-
- KVRAF
- Topic Starter
- 1579 posts since 25 Mar, 2017
So let me just make sure I understand you. You're saying DAC errors at a single point which are several orders of magnitude less than the rounding error of floating point precision are going to drown out the cumulative errors of floating point precision compounded by every operation and every buffer fetch within the VST signal path? And you know this even though every system and motherboard has potentially a different DAC? And also you're saying that the analog audio side of the DAC has even less precision, which I imagine is why synths based on pure analog electronics sound so much worse than digital synths?
I've grown a little tired of hearing this argument from every single "expert" on the issue none of whom have actually tried it.
I'm going to actually try it, code it, and see what happens.
I've grown a little tired of hearing this argument from every single "expert" on the issue none of whom have actually tried it.
I'm going to actually try it, code it, and see what happens.
-
- KVRAF
- 9133 posts since 6 Oct, 2004
Here's a few sounds layered and sequenced, from the International folder, which I somehow had missed exploring, lots there to work and play with
You do not have the required permissions to view the files attached to this post.
- KVRAF
- 8828 posts since 6 Jan, 2017 from Outer Space
If you ever built analog gear, or just read about it, you should know that even today its hard to get even close to a signal to noise ratio of 120 dB. That corresponds to a resolution of 20-bit and is way beyond what yo can hear, as the sound of your blood streaming through your ears already makes more noise. Don’t forget that the dB scale is a logarithmic scale…FathomSynth wrote: ↑Wed Jun 30, 2021 3:27 am And also you're saying that the analog audio side of the DAC has even less precision, which I imagine is why synths based on pure analog electronics sound so much worse than digital synths?
But that is the resolution of levels in the DAC. The resolution of pitch is a different story and more complex. But the number of hair cells in the ear would let me assume that 24-bit is also more than needed. When I play my LinnStrument, it seems even the 14-bit of Midi make me happy enough.
1-bit difference doubles the resolution…
- KVRAF
- 2846 posts since 8 Jun, 2018
it is indeed true that a 24 bit DAC, 'uses' 20 bit. 120dB. it depends on a DAC, if the noise floor is low enough. but a 96dB, 16bit DAC can also perform as good as a...Tj Shredder wrote: ↑Fri Jul 02, 2021 5:07 amIf you ever built analog gear, or just read about it, you should know that even today its hard to get even close to a signal to noise ratio of 120 dB. That corresponds to a resolution of 20-bit and is way beyond what yo can hear, as the sound of your blood streaming through your ears already makes more noise. Don’t forget that the dB scale is a logarithmic scale…FathomSynth wrote: ↑Wed Jun 30, 2021 3:27 am And also you're saying that the analog audio side of the DAC has even less precision, which I imagine is why synths based on pure analog electronics sound so much worse than digital synths?
But that is the resolution of levels in the DAC. The resolution of pitch is a different story and more complex. But the number of hair cells in the ear would let me assume that 24-bit is also more than needed. When I play my LinnStrument, it seems even the 14-bit of Midi make me happy enough.
1-bit difference doubles the resolution…
and don't forget opamps...
but these are different domains.
C datatypes, math in a soft synt/effect, is something different than the resolution of your DAC, or how your DAC works.
it doesn't concern itself with it, it is not important.
double in C, or java, is 64 bit, but gives 15 significant digits. (or 17 it seems, always thought, o wel..)
the problem is here; talking about bits, you must know the context or better the domain; bits in a DAC, are not bits in C.
and making a project in 32float, in a DAW, does not mean more dynamic, because, even a 32bit integer DAC, i don't know the real resolution of that kind of DAC, but 32float, seems 24 bit....
it means more headroom and less rounding errors. in a DAW you can work with 64float (double precision), if you want to.
and has no connecting with the DAC, it is the inner workings of a DAW, or plugins, mixing engines, etc.
and even if you have a insane DAC, the opamps can't handle it, or your speakers. my can handle it seems, peak 112dB, with a sensitivity of 92dB (at 1 meter). all that matters.
those numbers says nothing about the quality of the speakers of course, the quality is defined another way.
seperate enclosures for each driver, the build of the filters, the build of the enclosures, the build of the drivers. etc. etc.
we tread in a seperate domains, while all is still called 'audio'.
and bits in Midi mean again quite another thing. indeed 1 bit, doubles the resolution, in the Midi domain.. but they aren't 'audio' values, they represent another kind of data.
what is common: representing 'data'. representation. but it all are different domains, how to make the 'best' representation...
the proof is in the pudding, even if a theory can be sound...
sorry, i am no expert..
let's go to work with Fathom Vector, and make some strange sounds...
Primoridal Music: sadà\exposadà - Indusrial & Expanding Your Mind Hurts: Sound Brut
-
- KVRAF
- 3735 posts since 17 Sep, 2016
You do realize that MIDI has zero audio components whatsoever...Tj Shredder wrote: ↑Fri Jul 02, 2021 5:07 am If you ever built analog gear, or just read about it, you should know that even today its hard to get even close to a signal to noise ratio of 120 dB. That corresponds to a resolution of 20-bit and is way beyond what yo can hear, as the sound of your blood streaming through your ears already makes more noise. Don’t forget that the dB scale is a logarithmic scale…
But that is the resolution of levels in the DAC. The resolution of pitch is a different story and more complex. But the number of hair cells in the ear would let me assume that 24-bit is also more than needed. When I play my LinnStrument, it seems even the 14-bit of Midi make me happy enough.
1-bit difference doubles the resolution…
Last edited by zzz00m on Sat Jul 03, 2021 6:00 pm, edited 1 time in total.
Windows 10 and too many plugins
- KVRAF
- 2846 posts since 8 Jun, 2018
you are quoting me, it looks, but you are quoting someone else... i did mention, that midi isn't audio, but another kind of data.
Primoridal Music: sadà\exposadà - Indusrial & Expanding Your Mind Hurts: Sound Brut
- KVRAF
- 8828 posts since 6 Jan, 2017 from Outer Space
It was me. In a computer audio or Midi is just numbers. “1-bit doubles the resolution” explains the math behind both… we also deal with different properties of audio within any dsp calculation. Levels and frequencies are different things as well…
-
- KVRAF
- 3735 posts since 17 Sep, 2016
-
- KVRist
- 94 posts since 7 Aug, 2018 from Michigan
I'm getting clicks on every new note when I'm running mono and use glide. Losing my mind a bit trying to debug. I have tried screwing with every single setting, and the clicking always persists. I was having a bunch of these problems a year ago and basically stopped using this synth, decided to fire it up again and the clicking is back.. Running Fathom 3.2.0.28 Version 64, Reaper 6.32.