1

所以基本上我在 p5.js 中制作音频均衡器,但我不知道如何调制特定的频率。如果有人知道,请在声音文件中提供一些见解。

4

1 回答 1

1

我相信您正在寻找的是带阻滤波器。这是带通滤波器的倒数。带通滤波器使给定中心附近的频率保持不变,同时降低上下频率的幅度。带阻滤波器则相反,它会降低给定中心周围的频率幅度,同时保持上方和下方的频率不变。在 p5.sound 中,这是使用过滤器类型完成的'notch'。这种过滤器类型没有特殊的类(如p5.BandPass),因此您只需使用泛型p5.Filter并将类型传递给构造函数。这是一个基于 p5.sound 参考的示例:

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>

于 2021-05-16T21:54:19.510 回答