简体   繁体   English

Web音频增益节点未完全静音

[英]web audio gain node not muting audio completely

I've been trying to either filter, attenuate or mute audio completely in my app. 我一直在尝试完全过滤,衰减或静音我的应用程序中的音频。 with this code, I've been able to slightly quiet my audio using solutions I found, but setting gainNode.gain.value = 0 doesn't actually set it to 0, and negative integers make it louder. 通过此代码,我能够使用找到的解决方案使音频稍微安静一些,但是将gainNode.gain.value = 0设置实际上并没有将其设置为0,而负整数会使它变大。 I've thought it possible I have 2 routes for the sound to play through and that the gain node is only one of them, but I don't see how to isolate it. 我认为可能有2条途径可以让声音播放,并且增益节点只是其中之一,但是我看不出如何隔离它。 The filter I've added does nothing so far either, but I simply want to be able to cut the sound out. 到目前为止,我添加的过滤器也没有任何作用,但我只是希望能够消除声音。

 window.onload = function () { var volumeBars = { mono: document.getElementById("monoFill") }; document.getElementById("open-file").onchange = function (evt) { var file = evt.target.files[0]; var reader = new FileReader(); reader.onload = function (e) { playSound(e.target.result); } reader.readAsArrayBuffer(file); } document.getElementById("open-file1").onchange = function (evt) { var file = evt.target.files[0]; var reader = new FileReader(); reader.onload = function (e) { playSound1(e.target.result); } reader.readAsArrayBuffer(file); } var context = new AudioContext(); var context1 = new AudioContext(); var playbackControl = document.querySelector('.playback-rate-control'); var playbackValue = document.querySelector('.playback-rate-value'); var panControl = document.querySelector('.panning-control') var panValue = document.querySelector('.panning-value'); var mute = document.querySelector('.mute'); var gainSlider = document.getElementById("gainSlider"); var filtControl = document.querySelector(".filter-control") var filtValue = document.querySelector(".filter-value"); function playSound(arraybuffer) { context.close(); context = new AudioContext(); var source = context.createBufferSource(); var gainNode = context.createGain(); var panNode = context.createStereoPanner(); var filter = context.createBiquadFilter(); filter.type = 'lowpass'; source.connect(panNode); panNode.connect(context.destination); context.decodeAudioData(arraybuffer, function (buffer) { source.buffer = buffer; source.loop = true; source.playbackRate.value = playbackControl.value; source.connect(gainNode); gainNode.connect(context.destination); source.connect(filter); filter.connect(gainNode); //speed slider playbackControl.oninput = function () { source.playbackRate.value = playbackControl.value; playbackValue.innerHTML = playbackControl.value; } //pan slider panControl.oninput = function () { panNode.pan.value = panControl.value; // panValue.innerHTML = panControl.value; } //filter slider filtControl.oninput = function () { filter.frequency.value = filtControl.value; filtValue.innerHTML = filtControl.value; } gainSlider.addEventListener('change', function () { gainNode.gain = this.value; }); mute.onclick = voiceMute; function voiceMute() { if (mute.id == "") { gainNode.gain.value = 0; mute.id = "activated"; mute.innerHTML = "Unmute"; } else { gainNode.gain.value = 1; mute.id = ""; mute.innerHTML = "Mute"; } } }); 
 <div> <button class="mute">Mute button</button> </div> <p><input class="filter-control" type="range" min="0" max="400" step="1" value="400"> <span class="filter-value">1.0</span></p> <p><input id="gainSlider" type="range" min="0" max="1" step=".05" value="1">Volume</p> <p><input class="playback-rate-control" type="range" min="0.25" max="3" step="0.01" value="1"> <span class="playback-rate-value">1.0</span></p> <p><input class="panning-control" type="range" min="-1" max="1" step=".05" value="0">Pan</p> 

Add a function to disconnect a node to prevent audio from reaching the destination 添加功能以断开节点的连接,以防止音频到达目的地

pause=function(){
filter.disconnect();
};
// and to play
var play=function(){
filter.connect(gainNode);
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM