[英]Web audio API ChannelMergerNode not working as expected on Safari
我使用 ChannelMergerNode 創建了一個簡單的 jsfiddle,在右揚聲器上播放振盪器。 它在 Chrome 上按預期工作,但在 Safari 上,聲音會在兩個揚聲器(左右)播放。
var audioContext = window.AudioContext || window.webkitAudioContext;
var context = new audioContext();
var merger = context.createChannelMerger();
merger.connect(context.destination);
var osc = context.createOscillator();
osc.connect(merger, 0, 1);
osc.start();
osc.stop(10.0);
https://jsfiddle.net/RivkaB/tcnofjy1/16/
知道如何解決這個問題嗎? 謝謝你。
ChannelMergerNode
接口用於將由ChannelSplitterNode
拆分的通道合並為單個通道。 您獲得的平移效果可能是該節點的 Chrome 實現的副作用,盡管我不確定。
如果您不想創建立體聲平移效果,請創建一個StereoPannerNode
,它允許您控制左右兩側的 output。
StereoPannerNode
具有pan
屬性。 此屬性有一個value
屬性,它可以是從-1
(左)到1
(右)的數字,其中0
是中心。
const buttons = document.querySelectorAll('button'); const audioContext = new AudioContext(); const stereoPannerNode = audioContext.createStereoPanner(); const oscillatorNode = audioContext.createOscillator(); oscillatorNode.connect(stereoPannerNode); stereoPannerNode.connect(audioContext.destination); for (const button of buttons) { button.addEventListener('click', function() { if (button.value === 'play') { oscillatorNode.start(); } else if (button.value === 'left') { stereoPannerNode.pan.value = -1; } else if (button.value === 'right') { stereoPannerNode.pan.value = 1; } else { stereoPannerNode.pan.value = 0; } }); }
<button value="play">Play</button> <button value="left">Only left</button> <button value="right">Only right</button> <button value="both">Both</button>
我認為 Safari 尚未更新其ChannelMergerNode
以遵循規范。 已經有一段時間了,但我認為發生的事情是,由於您只連接一個輸入,output 只包含一個通道,基本上忽略了未連接的輸入 0。
如果您希望它與 Safari 一起使用,您需要將某些東西連接到輸入 0。這可能是您的振盪器連接到零增益節點。 或者可能是一個帶有全零緩沖區的循環AudioBufferSourceNode
。
但我也不是 100% 肯定這會奏效。 如果這不起作用,請使用具有非常小的值的AudioBufferSourceNode
,例如 1e-20。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.