#filter #web-audio-api
#Фильтр #web-audio-api
Вопрос:
У меня есть простой фильтр.
var filter = ctx.createBiquadFilter();
filter.type = 'highpass';
filter.frequency.setValueAtTime(10,ctx.currentTime);
Я хотел бы видеть его частотную характеристику с использованием getFrequencyResponse
window.setInterval(function() {
var frequencyHz = new Float32Array(1),
magResponse = new Float32Array(1),
phaseResponse = new Float32Array(1);
frequencyHz[0] = 10;
filter.getFrequencyResponse(frequencyHz,magResponse,phaseResponse);
console.log(magResponse);
},100);
Я ожидаю увидеть, [0.9565200805664062]
какой правильный ответ для 10 Гц, но вместо этого я вижу, [0.0008162903832271695]
какой ответ для 350 Гц, значения частоты по умолчанию.
Я могу получить разумный ответ, только если вручную задам значение, тогда как если я использую методы param, такие как setValueAtTime
, ответ фильтра игнорирует их и выдает значение по умолчанию. Другими словами, getFrequencyResponse
похоже, работает только в том случае, если значения фильтра заданы вручную, предотвращая анализ фильтра, когда значения задаются автоматизацией. Если это правда, то это похоже на нечто большее, чем просто небольшая проблема с api.
Кто-нибудь, пожалуйста, попробуйте что-нибудь похожее на это, и если это сработает (сомнительно), пожалуйста, опубликуйте код.
Ответ №1:
На самом деле, нет, это должно вступить в силу, но поскольку вы вызываете мгновенное изменение значения в СЛЕДУЮЩЕМ блоке обработки (вот что означает «.currentTime»), это изменение еще не было обработано, поэтому вы видите значение по умолчанию. Вы должны увидеть, например, изменения getFrequencyResponse с течением времени для setLinearRamp.
Комментарии:
1. Я также пробовал linearRamp, но безуспешно. Я просматриваю данные ответа несколько раз, используя интервал времени, поэтому независимо от типа параметра, который я использую, он должен быть обработан, и в какой-то момент я должен увидеть эффект. Попробуйте.
2. О, привет, Крис, не знал, что это ты. спасибо, что нашли время перейти по ссылке, если вы попали сюда именно так.