I'm trying to wrap my head around using the Web Audio API to recreate something like
Winamp's 10-band equalizer.
(source: head-fi.org)
From what I can gather, I have to create 10 Biquad Filters, set their type
to 2 (for a Bandpass filter) and set their frequency
to [60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000]
respectively. Once I have done that (and here's where I'm getting a little confused) I would then create a separate Gain Node for each frequency "band" and bind its value to a slider.
<input id="someFreqBand" type="range" min="-12" max="12" step="0.1" value="0" onchange="slide()"/>
Assuming all of that is correct, then the only remaining step is to connect all 10 gain nodes to the Audio Context destination
(which I imagine will take all 10 frequency "bands" and mix/sync them back together). Is this the right way to go about creating a Web Audio 10-band equalizer?
The major thing I'm confused about is how I go about "connecting" the source to the 10 frequency band filters (+ associated gain node) since all the nodes only have a single input or output (including the destination).
The 10 band equalizer element allows to change the gain of 10 equally distributed frequency bands between 30 Hz and 15 kHz.
Graphic EQs typically divide sound into six or 31 bands of frequency, with a slider controlling each band. The number of filters used depends on the EQ.
By connecting every filter with the destination you are creating 5 paths (routes) so you will hear quintupling amplification of the source sound. It's not the correct way. You have to connect each filter in one line.
source.connect(filter1);
filter1.connect(filter2);
filter2.connect(filter3);
filter3.connect(filter4);
filter4.connect(filter5);
filter5.connect(context.destination);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With