-
Notifications
You must be signed in to change notification settings - Fork 277
Description
I've been thinking about this for a while. What do you think of the possibility of adding an equalizer?
I don't have a specific implementation in mind, but a general idea would be to create a source that we can pass an array into, where this array represents the bands in an equalizer.
In the image above, it defines each band in an array, then connects the values between, i.e., let's say the user adds 12hz
and 18hz
to the array. We can then amplify 8db
on the 18hz
, and no amplification for the 12hz
. Then between 13,14,15,16,17hz will be linearly interpolated for them to ascend in amplification till it reaches the 18hz
, then it will go down for a third number if we have one.
This allows users to define their own band ranges and how much they want them amplified.
Here is a visualization of [12, 18, 28]hz
.
We would need a baseline amplification separate from the array, which would control the overall band's amplification like a pre-amp
. This would allow users to lower or increase all bands relative to the pre-amp before applying the individual amp on each band.
Regarding implementation, I would like some input before starting coding.
Note: If using this with AGC
, this would need to take precedence before the AGC
to avoid distortion issues. Otherwise, the AGC
would amplify it and then the equalizer would amplify as well, creating distortion. However, if we amplify with the equalizer first and feed it into the AGC
, there should be no issues.
Another thing to consider is real-time adjustments. Most people want to be able to change the equalizer settings in real time, so we would need to use periodic_access
or atomic_float
. Maybe implement both to satisfy the most users, and we would need mutable access to the array itself for the user to be able to add or remove bands during runtime.