我使用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
,可让您在左侧和右侧控制输出。
StereoPannerNode
具有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 === 'left') {
stereoPannerNode.pan.value = -1;
} else if (button.value === 'right') {
stereoPannerNode.pan.value = 1;
} else {
stereoPannerNode.pan.value = 0;
}
oscillatorNode.start();
});
}