首页 > 解决方案 > 将卷积器混响添加到音频文件

问题描述

对不起,我真的是 Javascript 和网络音频 api 的新手。我正在尝试向音频文件添加混响,可以调节要添加的混响量,但代码不起作用......你能帮帮我吗?提前非常感谢!

所以感谢@Raymond Toy,我在代码中发现了问题。此代码现在有效:

   const track1 = audioContext.createMediaElementSource(audioElement1);
   const playButton1 = document.getElementById('player1');
   const gainNode1 = audioContext.createGain();
   var sub1 = document.getElementById("sub1");
   
   var impulseResponseBuffer;
   var getSound = new XMLHttpRequest ();
   getSound.open("get", "circular.wav", true);
   getSound.responseType = "arraybuffer";

   getSound.onload = function () {
       audioContext.decodeAudioData(getSound.response, function(buffer) {
          impulseResponseBuffer = buffer;
       });
   };
   getSound.send();

   playButton1.addEventListener('click', function() {
   if (audioContext.state === 'suspended') {
       audioContext.resume();
   }

   if (this.dataset.playing === 'false') {
       audioElement1.currentTime = 0;
       audioElement1.play();
       audioElement1.loop = 'true';
       this.dataset.playing = 'true';
       var convolver = audioContext.createConvolver();
       convolver.buffer = impulseResponseBuffer;
       track1.connect(convolver);
       convolver.connect(gainNode1);
       gainNode1.connect(audioContext.destination);
       track1.connect(audioContext.destination);
       sub1.innerHTML = "Stop";
   } else if (this.dataset.playing === 'true') {
       audioElement1.pause();
       this.dataset.playing = 'false';
       sub1.innerHTML = "Play";
   }
   }, false);

   audioElement1.addEventListener('ended', () => {
   playButton1.dataset.playing = 'false';
   }, false);

   const volumeControl1 = document.getElementById('volume1');
   
   volumeControl1.addEventListener('input', function() {
       gainNode1.gain.value = this.value;
   }, false);""

标签: javascriptweb-audio-api

解决方案


首先,您确实需要描述它不起作用的方式。没有声音吗?声音不是你所期望的?开发者控制台中的错误消息?

其次,考虑查看模块化路由中的图 2 和示例 2 。那里有很多无关的东西,但我认为您想要的是两个增益节点:干增益和湿增益,其中干增益用于您正在播放的音频(未修改),湿增益用于输出卷积器。您可以调整增益以控制最终输出中有多少卷积器效果。


推荐阅读