JavaScript:Библиотеки/p5.sound/Класс p5.Filter

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



Класс p5.Filter [1]

Описание

Этот класс использует узел BiquadFilterNode из Web Audio API для фильтрации частот во входящих аудиоданных. У него есть несколько подклассов:

  • Класс p5.LowPass. Фильтр низких частот. Пропускает частоты ниже пороговой частоты и игнорирует частоты, которые находятся выше нее.
  • Класс p5.HighPass. Фильтр высоких частот (фильтр низких частот наоборот). Пропускает частоты выше пороговой частоты и игнорирует частоты, которые находятся ниже нее.
  • Класс p5.BandPass. Фильтр диапазона частот. Пропускает частоты в пределах заданного диапазона и игнорирует частоты, находящиеся выше и ниже этого диапазона.

Для того, чтобы задать диапазон частот для p5.BandPass, используется функция res(). Если вы работаете с p5.LowPass или p5.HighPass, то функция res() используется для того, чтобы задать резонанс на пороговой частоте.

Класс p5.Filter является расширением класса p5.Effect, поэтому для него также доступны методы amp(), chain(), drywet(), connect() и disconnect().

Чтобы использовать этот класс, нужно подключить библиотеку p5.sound. Для этого в заголовок своего файла «index.html» впишите следующее:

<script language="javascript" type="text/javascript" src="path/to/p5.sound.js"></script>

Синтаксис

new p5.Filter([type])

Параметры

type  то, фильтр какого типа нужно задать. Возможные значения: фильтр низких частот («lowpass»; значение по умолчанию), фильтр высоких частот («highpass») и фильтр диапазона частот («bandpass»). Тип данных  String

Поля

Методы

  • process() – фильтрует аудиосигнал в соответствии с заданными параметрами.
  • set() – задает пороговую частоту и резонанс фильтра.
  • freq() – задает частоту фильтра между 10 и 22050 герцами (это диапазон частот, слышимых человеческим ухом, но в действительности большинство людей слышат в более узком диапазоне). Если вы работаете с фильтрами p5.LowPass или p5.HighPass, то эта частота будет служить пороговой частотой, а если с фильтром p5.BandPass, то она будет служить опорной частотой, на базе которой будет рассчитываться диапазон частот.
  • res() – задает ширину диапазона частот (если вы работаете с p5.BandPass) или резонанс (если работаете с p5.LowPass или p5.HighPass) фильтра.
  • gain() – управляет громкостью объекта p5.Filter, меняя значение свойства «gain» узла BiquadFilterNode. Отличается от функции amp(), наследующей у p5.Effect.amp(). Если amp() управляет громкостью при помощи выходного узла GainNode объекта p5.Filter, то gain() управляет громкостью через свойство «gain» узла BiquadFilterNode.
  • toggle() – функция переключения между заданным фильтром и режимом, когда фильтр пропускает все частоты.
  • setType() – задает тип фильтра. Возможные значения: «lowpass» (по умолчанию), «highpass», «bandpass», «lowshelf», «highshelf», «peaking», «notch» и «allpass».

Пример

№1

var fft, noise, filter;

function setup() {
  fill(255, 40, 255);

  filter = new p5.BandPass();

  noise = new p5.Noise();
  // отключаем «выходы» неотфильтрованного шума (объекта p5.Noise)
  // и подключаем его к фильтру (к объекту p5.BandPass):
  noise.disconnect();
  noise.connect(filter);
  noise.start();

  fft = new p5.FFT();
}

function draw() {
  background(30);

  // задаем частотный диапазон фильтра
  // при помощи движения мышки по горизонтали:
  var freq = map(mouseX, 0, width, 20, 10000);
  filter.freq(freq);
  // задаем ширину диапазона частот
  // (чем меньше значение, тем шире диапазон):
  filter.res(50);

  // рисуем отфильтрованный диапазон частот:
  var spectrum = fft.analyze();
  noStroke();
  for (var i = 0; i < spectrum.length; i++) {
    var x = map(i, 0, spectrum.length, 0, width);
    var h = -height + map(spectrum[i], 0, 255, height, 0);
    rect(x, height, width/spectrum.length, h);
  }

  isMouseOverCanvas();
}

function isMouseOverCanvas() {
  var mX = mouseX, mY = mouseY;
  if (mX > 0 && mX < width && mY < height && mY > 0) {
    noise.amp(0.5, 0.2);
  } else {
    noise.amp(0, 0.2);
  }
}

№2

№3

См.также

Внешние ссылки