ConvolverNode

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();

Приклад зміни гучності ефекту реверберації звуку:

convolverGain.gain.value:
<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();