Error 64-bit mixing in Waveform 13 OR Cmajor plugin Input

Discussion about: tracktion.com
Post Reply New Topic
RELATED
PRODUCTS

Post

While learning how to write in CMajor, I discovered a very unpleasant feature. I sincerely hope that the problem lies precisely in the Cmajor Api inside Waveform.

In general, the bottom line is this: in the Waveform Advanced settings, we can manually specify the use of 64-bit math when mixing. This implies high processing accuracy when calculations with variables occur at the level of 16 decimal
places X.000000000000000X
instead of 32-bit mathematics with only 7 digits
X.000000X
The higher the accuracy, the easier it is to avoid some rounding, which sometimes leads to digital distortion, dithering is used to avoid it.
In general, those who understand do not need to explain it to those who do not understand, and they are not interested in reading it.

So, I'm in the process of learning CMajor, where a fairly simple way to interact with an audio data stream

Code: Select all

input stream float LeftIn
output stream float LeftOut
LeftOut <- LeftIn
In the plugin, we simply receive a stream of 32-bit data and send the same stream from the plugin. If I tell waveform to work with 64-bit data, my plugin will automatically round the received data to 32 bits, respectively, which means we need to increase the accuracy of the data inside the plugin

Code: Select all

input stream float64 LeftIn
output stream float64 LeftOut
LeftOut <- LeftIn
Attention, but here we are in for a surprise, the plugin stops receiving data completely, it does not accept the stream in 64-bit form.
Okay, maybe the stream from the sample or synthesizer doesn't match, let's take less and give more output

Code: Select all

input stream float LeftIn
output stream float64 LeftOut
LeftOut <- LeftIn
It is impossible, a stream of different data cannot be directly fed from 32 to 64 bits, I understand, I convert

Code: Select all

input stream float LeftIn
output stream float64 LeftOut
float64 NNN = LeftIn
LeftOut <- NNN
That's all, the stream received in 32 bits converts the math to 64 and transmits it further to the mixer.
Now we can get 64-bit precision data sequentially in the mixer after we manually converted it, right?
NO
If we try to get the data in 64-bit format sequentially after conversion, the plugin will not receive the audio stream data again and will remain silent.

Why? Well, I have two versions of why this might be happening.
1. Either enabling 64-bit mathematics inside Waveform is a broken function, because the Cmajor Api does not allow streaming without direct conversion, and requiring Waveform to provide 64-bit data, it receives only 32 bits, respectively, which means that all plug-ins always work in 32-bit mathematics and (probably) only when adding the values of several channels. increases accuracy, which completely disavows the idea of free plug-in chains on each track.
2 - Or, an error occurred when embedding the Cmajor Api inside Waveform, where the received stream is Cmajor patches with a maximum capacity of 32 bits.

I never rule out the possibility that I might not understand something, but if Waveform does not adjust the data within the plug-in chain at all, but simply rounds each plug-in to 32 bits at all times, there is a possibility that after each plug-in used (especially complex calculations like reverb, delay, pitch) we need to constantly use dithering for distortion limitations? :ud:
цвет волшебства

Post

I don't like it when I have doubts, so I opened the official documentation and tried to make sure I understood exactly what I was interested in.
Use 64-bit Maths When mixing Tracks - Normally this setting is left on, especially if you have a modern fast computer. It adds
track outputs together using 64-bit samples rather than 32-bit. This avoids a noise floor build-up from rounding errors. You
probably won’t notice much difference if it’s on or off. If you have a very old computer with limited CPU, leave it off. By default
it’s off. I usually leave 64-bit maths turned on.
And yes, it's obvious that we're talking exclusively about mixing tracks with each other.
If you want to use any plug-ins to emulate analog equipment or mix, the calculation accuracy will always be 32 bits. :(
Forget about the accuracy of emulation in plugins, at least for now.
I'm not a programmer, but I figured out how to check the size of the data coming to the plugin. Using Hise, I generated a project for a simple volume booster, and opening the project in Visual Studio, I edited the vstWrap file. The methods used by C++ are called processReplace for 32bit and processDoubleReplace for 64, respectively, so Juce compiles a fairly simple code, where it checks whether the processor is capable of processing double precision or not, and then in each method checks if it is able to execute the code, if the condition is removed from the methods and the 32-bit method is muted, then in theory, the sound will only be when the plug-in receives 64-bit data, which I have seen., having compiled 4 plugins, do not go wrong, if you do the opposite, by drowning out the 64-bit calculation, the sound never disappears.
This is probably one of the most painful discoveries for me in Waveform at the moment. :(

Added: Be sure to use dithering, everyone who has suddenly read this far :scared:
цвет волшебства

Post

Maybe you did it already, but let me comment that the audio engine to my understanding is open source and can be studied for its internals. IIRC, you need a licencse to use it in your projects, but studying the code would be possible any time.
https://github.com/Tracktion/tracktion_engine
Classical guitar --> Line Audio CM4 @ SSL12 --> KDE-Plasma @ Debian-Linux --> Waveform PRO 13.5

Post

Maarid wrote: Tue Mar 18, 2025 11:57 am If you want to use any plug-ins to emulate analog equipment or mix, the calculation accuracy will always be 32 bits. :(
Not speaking for Waveform or CMajor specifically but:


The calculation accuracy within the plugin, or the host's audio processors, can definitely be 64-bit. It is been/being done by plugins.

What might not be possible as 64-bit is the bitdepth of the data being passed between those processes, but that's not calculation accuracy.
An idiot on Set Theory:
"In some cases there is an object called red that contains everything that is red. In much the same way a pot is a plate."

Post

you are always in the right place, thank you, but this is not quite true, traction engine compared to waveform, it is as if next to the bugatti veiron stand you would be offered a motor, crankshaft and gearbox with the slogan don't buy Bugatti, buy spare parts and assemble Bugatti yourself :hihi:
whyterabbyt wrote: Tue Mar 18, 2025 4:52 pm What might not be possible as 64-bit is the bitdepth of the data being passed between those processes, but that's not calculation accuracy.
and this is also not entirely true, double-precision calculations do not require a double-precision stream at all, if you understand what I'm talking about. And accordingly, if you now understand what this means, then you understand what the effect will be when rounding each calculation of the effect sequentially without dithering along the chain, right?
цвет волшебства

Post

Maarid wrote: Tue Mar 18, 2025 6:51 pm and this is also not entirely true, double-precision calculations do not require a double-precision stream at all
Yes, that's what I just said. So it is entirely true, because you're agreeing with it.
if you understand what I'm talking about.
You said exactly what I said, as evidence that what I said wasnt correct, so I suspect its you who dont understand.
An idiot on Set Theory:
"In some cases there is an object called red that contains everything that is red. In much the same way a pot is a plate."

Post

whyterabbyt wrote: Tue Mar 18, 2025 4:52 pmWhat might not be possible as 64-bit is the bitdepth of the data being passed between those processes, but that's not calculation accuracy.
:) Oh, is that how it is? Well, then it immediately became clear what you were talking about, otherwise your transparent remarks look like you don't agree that constant rounding after each effect reduces the accuracy of emulation and even the use of dithering in each step leads to its direct accumulation in long chains on each track, and that's exactly what you meant when you indicated, that there is no way to transfer a double precision stream between plugins in a chain, now that explains everything, thanks
цвет волшебства

Post

Maarid wrote: Wed Mar 19, 2025 4:17 amotherwise your transparent remarks look like you don't agree that
so first you pretend i said the opposite of what i did so you could 'correct' me, and now you're going for a strawman.

i see what you're doing. looks you're one of those tediously arrogant types who is more interested in attacking anyone trying to help you, rather than accepting what's going on. good luck with that bullshit.
An idiot on Set Theory:
"In some cases there is an object called red that contains everything that is red. In much the same way a pot is a plate."

Post

whyterabbyt wrote: Wed Mar 19, 2025 9:00 am
Maarid wrote: Wed Mar 19, 2025 4:17 amotherwise your transparent remarks look like you don't agree that
so first you pretend i said the opposite of what i did so you could 'correct' me, and now you're going for a strawman.

i see what you're doing. looks you're one of those tediously arrogant types who is more interested in attacking anyone trying to help you, rather than accepting what's going on. good luck with that bullshit.
thank you so much for your criticism, I will definitely keep this in mind when I want to know your opinion again, be sure to keep me informed about the situation. :hug:
цвет волшебства

Post

:zzz:
An idiot on Set Theory:
"In some cases there is an object called red that contains everything that is red. In much the same way a pot is a plate."

Post

I was reminded of this -
"I've been chasing you for three days. To tell you how much I don't care about you!" The Princess from the film An Ordinary Miracle
I don't know the English equivalent of this phrase.
цвет волшебства

Post Reply

Return to “Tracktion”