Почему JS выдает ошибку типа, когда я пытаюсь подключить аудио к Biquad Filter? - PullRequest
0 голосов
/ 25 апреля 2020

Я возился с API WebAudio и по какой-то причине не могу заставить работать Biquad Filter. Мои осцилляторы, конверты и пользовательские эффекты работают нормально, но фильтр доставляет мне неприятности.

У меня есть мастер-контроль усиления vca, который я хочу отправить через фильтр на context.destination. vca определяется просто так:

var vca = context.createGain();
vca.gain.value = 0.3

Я построил свой фильтр следующим образом:

function lowpass() {
  var filter = context.createBiquadFilter();
  filter.type = 'lowpass';
  filter.frequency.value = 1000
}
var filt = new lowpass

Когда я пытаюсь выполнить следующее, CodePen выдает ошибку типа:

vca.connect(filt);
filt.connect(context.destination)

Почему это происходит? Что-то не так с настройками фильтра, мой метод подключения VCA? Как я построил фильтр? Спасибо.

1 Ответ

1 голос
/ 25 апреля 2020

Это способ создания нового фильтра. lowpass() - обычная функция, но ключевое слово new обрабатывает ее как конструктор.

Вы можете исправить свой код, вызвав его как обычную функцию и возвращая из нее filter.

function lowpass() {
  var filter = context.createBiquadFilter();
  filter.type = 'lowpass';
  filter.frequency.value = 1000
  return filter;
}
var filt = lowpass()

Если вы хотите go сделать еще один шаг, вы можете передать context в функцию вместо того, чтобы полагаться на context, который будет определен во внешней области видимости, чтобы сделать его немного чище.

function lowpass(context) {
  var filter = context.createBiquadFilter();
  filter.type = 'lowpass';
  filter.frequency.value = 1000
  return filter;
}
var filt = lowpass(context)
...