So basically i am making audio equaliser in p5.js and i dont know how to modulate a particular freq. in a soundFile if anyone know please provide some insight to it.
I believe what you are looking for is a Band Stop filter. This is the inverse of a Band Pass filter. A Band Pass filter leaves frequencies around a given center unchanged while reducing the amplitude of frequencies above and below. A Band Stop filter does the reverse, it reduces the amplitude of frequencies around a given center while leaving those above and below unchanged. In p5.sound this is accomplished using the filter type 'notch'
. There is no special class for this filter type (like p5.BandPass
), so you just use the generic p5.Filter
and pass the type to the constructor. Here is an example based on the p5.sound reference:
let fft, noise, filter;
function setup() {
let cnv = createCanvas(windowWidth, windowHeight);
cnv.mousePressed(makeNoise);
fill(255, 0, 255);
filter = new p5.Filter('notch');
// (lower res = wider band rejection)
// Note: When using a 'notch' filter, in order to filter out the
// same range a frequencies that you would be filtering for
// using a 'bandpass' filter, you need to use a much smaller res
// value. I'm not sure why this is.
filter.res(0.2);
// This example uses p5.Noise for demonstation purposes, but it
// should work just as well with a p5.SoundFile created with
// loadSound
noise = new p5.Noise();
// Don't play the noise directly
noise.disconnect();
// Instead pass it to the filter (which will be connected to
// audio output by default).
noise.connect(filter);
// This is just for the display
fft = new p5.FFT();
}
function draw() {
background(220);
// set the BandPass frequency based on mouseX
let freq = map(mouseX, 0, width, 20, 22050, true);
filter.freq(freq);
// draw filtered spectrum
let spectrum = fft.analyze();
noStroke();
for (let i = 0; i < spectrum.length; i++) {
let x = map(i, 0, spectrum.length, 0, width);
let h = -height + map(spectrum[i], 0, 255, height, 0);
rect(x, height, width / spectrum.length, h);
}
if (!noise.started) {
text('tap here and drag to change frequency', 10, 20, width - 20);
} else {
text('Frequency: ' + round(freq) + 'Hz', 20, 20, width - 20);
}
}
function makeNoise() {
// see also: `userStartAudio()`
noise.start();
noise.amp(0.2, 0.2);
}
function mouseReleased() {
noise.amp(0, 0.2);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.1/p5.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.1/addons/p5.sound.min.js"></script>