ConvolverNode - об'єкт для створення ефекту реверберації звуку.
var convoler= AudioContext.createConvolver();
convoler - змінна якій присвоюється об'єкт ConvolverNode.
AudioContext - об'єкт AudioContext
ConvolverNode об'єкт для лінійної згортки звуку для створення ефекту реверберації звуку (наприклад ефект звуку концертний зал, вана кімната і т.п.).
Методи успадковуються від об'єкта AudioNode.
if(window.AudioContext){
var audio = new AudioContext();
var convoler=audio.createConvolver();
alert(convoler);
}else alert('Ваш браузер не підтримує Web Audio');
Приклад генерації імпульсу для створення ефекту реверберації звуку:
var audio=new AudioContext();
var source=audio.createBufferSource();
var convolver=audio.createConvolver();
source.connect(convolver);
convolver.connect(audio.destination);
convolver.loop=true;
//функція для створення імпусного звуку
function impulseResponse(duration, decay, revers){
var sampleRate = audio.sampleRate;
var length=sampleRate*duration;
var impulse=audio.createBuffer(2, length,sampleRate);
if(!decay)decay = 2.0;
for(var i=0;i<length;i++){
var n = revers?length-i:i;
impulse.getChannelData(0)[i]=(Math.random()*2-1)* Math.pow(1-n/length, decay);
impulse.getChannelData(1)[i]=(Math.random()*2-1)* Math.pow(1-n/length,decay);
}
return impulse;
}
convolver.buffer=impulseResponse(2,2,false);
//завантажуємо основнуй звук
var ajax=new XMLHttpRequest();
ajax.open('get', '/dani/test.ogg', true);
ajax.responseType='arraybuffer';
ajax.onload=function(){
audio.decodeAudioData(this.response, function(decodedata){
source.buffer=decodedata;
source.start(0); //починаємо відтворення
});
}
ajax.send();
Приклад завантаження імпульсного звуку impulse_response.ogg для створення ефекту реверберації звуку:
var audio=new AudioContext();
var source=audio.createBufferSource();
var convolver=audio.createConvolver();
source.connect(convolver);
convolver.connect(audio.destination);
convolver.loop=true;
//завантажуємо імпульсний звук
var ajax=new XMLHttpRequest();
ajax.open('get', 'impulse_response.ogg', true);
ajax.responseType='arraybuffer';
ajax.onload=function(){ audio.decodeAudioData(this.response, function(decodedata){
convolver.buffer=decodedata;
});
}
ajax.send();
//завантажуємо основний звук
var ajax2=new XMLHttpRequest();
ajax2.open('get', 'test.ogg', true);
ajax2.responseType='arraybuffer';
ajax2.onload=function(){ audio.decodeAudioData(this.response, function(decodedata){
source.buffer=decodedata;
source.start(); //починаємо відтворення
});
}
ajax2.send();
Приклад зміни гучності ефекту реверберації звуку:
<input id="gainValue" type="range" min="0" max="1" step="0.1" value="1"> <label id="gainValueLabel"></label>
var context=new AudioContext(), source= context.createBufferSource();
var convolverGain = context.createGain();
var convolver = context.createConvolver();
var masterGain = context.createGain();
source.connect(convolverGain);
source.connect(masterGain);
masterGain.connect(context.destination);
convolverGain.connect(convolver);
convolver.connect(masterGain);
convolverGain.gain.value=1;
document.getElementById('gainValue').onchange=function(){document.getElementById('gainValueLabel').innerText=this.value; convolverGain.gain.value=this.value;};
//завантаження імпульсного звуку
ajaxRequest = new XMLHttpRequest();
ajaxRequest.open('GET', 'impulse_response.ogg', true);
ajaxRequest.responseType='arraybuffer';
ajaxRequest.onload=function(){
var impulseData=ajaxRequest.response;
context.decodeAudioData(impulseData, function(buffer){
convolver.buffer = buffer;
},
function(e){alert("Виникла помилка при декодуванні даних імпульсного звуку: " + e.err);});
}
ajaxRequest.send();
//завантаження основного звуку
request = new XMLHttpRequest();
request.open('GET', 'test.ogg', true);
request.responseType = 'arraybuffer';
request.onload=function(){
var audioData=request.response;
context.decodeAudioData(audioData, function(buf){
source.buffer=buf;
source.start(0); //починаємо відтворення
},
function(e){alert("Виникла помилка при декодуванні даних основного звуку: " + e.err);});
}
request.send();