Skip to content

Tracking issue for equalizer Source #742

@UnknownSuperficialNight

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.

Image

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.

Image

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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions