Web Audio Api: Как добавить работающий конволвер?
Что я пытаюсь узнать / сделать: Как настроить простой рабочий конволвер (ревербератор) в моей песочнице кода ниже, используя импульсный отклик. Я думал, что это похоже на настройку фильтра, но все выглядит совсем иначе.
Что я пробовал: Как и во всех новых технологиях, все меняется быстрыми темпами, что затрудняет определение правильной реализации, а неправильной. Я посмотрел бесчисленные учебники WebAudio Api Convolver, многие из них были старыми, а другие работали, но слишком «раздутые», что затрудняло понимание того, что происходит. Я попытался реализовать некоторые примеры из документации Mozilla:
Я уже посмотрел на:https://developer.mozilla.org/en-US/docs/Web/API/ConvolverNode/buffer
Мой вопрос: Как правильно интегрировать конвольвер в контексте ниже? Как видите, я пытался, но не могу понять это.
window.addEventListener('load', init, false);
function init() {
setupWebAudio();
}
function setupWebAudio() {
var audio = document.getElementById('music');
var context = new AudioContext();
var source = context.createMediaElementSource(audio);
var filter = context.createBiquadFilter();
var convolver = context.createConvolver();
var inpulseRes = "hall.mp3";
var hallBuffer = inpulseRes;
soundSource = context.createBufferSource();
soundSource.buffer = hallBuffer;
convolver.buffer = hallBuffer;
filter.type = 'lowpass';
filter.frequency.value = 400;
var theParent = document.getElementById("test");
theParent.addEventListener("mousedown", doSomething, false);
function doSomething(e) {
if (e.target !== e.currentTarget) {
if(e.target == theParent.children[0]){
filter.frequency.value += 200;
}
else if(e.target == theParent.children[1]){
filter.frequency.value -= 200;
}
else if(e.target == theParent.children[2]){
filter.type = 'highpass';
}
}
e.stopPropagation();
}
source.connect(filter);
source.connect(convolver);
filter.connect(context.destination);
audio.play();
}