Comment 13 for bug 854082

Revision history for this message
Daniel Schürmann (daschuer) wrote : Re: Lowband-EQ is creaking

I have made some tests with sine waves in different frequencies.
It turns out that all EQ channels are effected by this bug (with this exotic test case).

It also turns out that we can easily produce unwanted frequencies by sudden gain changes seeks and start or stops.
The good news is that all of this is not or hard to notice with real music files.

I am a little lost with the theory behind it maybe one expert can explain, please!
Here my theory for now:
A rectangular like gain change always produces a bunch of hear-able frequency, so thats not what we want.
So all gain changes must take place in a way without hear-able frequencies.
In theory below 20 Hz. So this results in a fade duration of 1/20 Hz / 4 = 0,0125 s
A triangular pulses has also hear-able frequencies. But I am not sure which ramp form is the theoretical ideal form. Maybe a sine quarter?

In EngineBuffer a 3,3 ms triangular ramp is used to start a new stream. This produces hear-able frequencies with my test files, but they are not noticeable with real music. When the stream ends, a random noise 3.3 ms triangular ramp is added. This is hear-able with my test files and not with real music. If I set the ramp to 12 ms I can still here additional frequencies. Finally with 50 ms ramp all additional frequencies are gone but the ramp itself becomes heatable. The noise at the end is always hear-able.

So its always a question of "Clean sound" vs. "Low Latency"

For me, we should add the fix to all three channels.
I am not sure if it is required to have a special case for the kill switches. This might be required for buffer sizes above 20 ms.
But will the user make extensively use of this on those long latencies? I think not ....
According to the theory above we might will have problem with low latencies. But fixing this will introduce additional complexity ...

The current patch is a good fix for the original problem, so it fine for me to commit and work on the whole thing later (if required)