10*sin(TWOPI*i/(0.4*WINDOW)) + 5*sin(TWOPI*i/(0.05*WINDOW)) + 2*sin(TWOPI*i/(0.1*WINDOW))
EQ is an 8 point Freq gain control
d_vec EQ_SETTINGS = {1.4,5.0,0.2,2.0,3.0,1.0,1.0,3.0,5.0};
this is being interpolated by using Cubic interpolation scheme Interpolate(EQ_SETTINGS,32)
and is convoluted to the frequency response
eq_filtered = convolve(freqDomain,EQ_INTERPOLATED);
Windowing ( Blackman ) Window is considered.
Fixed a bug where filter was not being applied properly to negative frequencies leading to weird filtering issues
LEFT The filter is not being flipped RIGHT Is how the filter must be applied
AUDACITY Freq plot
Decided to use ffmpeg due to it being faster and more efficient than mess of for loops i wrote ;-;
made a basic ffmpeg wrapper /include/ffmpeg_wrapper.h
from ffmpeg documentation, implemented bare stuff which are required to perform what project needs to do.
source.addFilter( frequency_in_Hz , gain_in_db );
ffmpeg documentation
firequalizer=gain_entry='entry(100,0);'
ffmpeg -i song.wav -f wav pipe:1 | ffplay -i -
allows to pipe ffmpeg output realtime to ffplay
Raspberry pi zero (which is being used in the presentation of project) doesn't have the required DAC to generate audio output so we pipe output through the PWM pins of rpi0.
GPIO pin 13 is used to pipe audio as PWM signal.
LPF HPF cascaded BPF filtering at GPIO pin
(im a noob alright)
http://ffmpeg.org/ffmpeg-filters.html#equalizer
https://ccrma.stanford.edu/~jos/vguitar/Fitting_Filters_Matlab.html