Javascript Web音频API ChannelMergerNode在Safari上未按预期工作
我使用ChannelMergerNode创建了一个简单的JSFIDLE,在右边的扬声器上播放振荡器。 它可以在Chrome上正常工作,但在Safari上,声音会同时播放到两个扬声器(左右) 你知道如何解决这个问题吗?Javascript Web音频API ChannelMergerNode在Safari上未按预期工作,javascript,html5-audio,web-audio-api,Javascript,Html5 Audio,Web Audio Api,我使用ChannelMergerNode创建了一个简单的JSFIDLE,在右边的扬声器上播放振荡器。 它可以在Chrome上正常工作,但在Safari上,声音会同时播放到两个扬声器(左右) 你知道如何解决这个问题吗? 多谢各位 使用ChannelMergerNode接口将被ChannelSplitterNode拆分的频道合并到单个频道中。您得到的平移效果可能是该节点的Chrome实现的副作用,尽管我不确定 如果您不想创建立体平移效果,请创建一个可以控制左右两侧输出的 StereoPannerN
多谢各位 使用
ChannelMergerNode
接口将被ChannelSplitterNode
拆分的频道合并到单个频道中。您得到的平移效果可能是该节点的Chrome实现的副作用,尽管我不确定
如果您不想创建立体平移效果,请创建一个可以控制左右两侧输出的
StereoPannerNode
具有pan
属性。此属性有一个值
属性,该属性可以是介于-1
(左)到1
(右)之间的数字,其中0
为中心
const buttons=document.queryselectoral('button');
const audioContext=新的audioContext();
const stereoPannerNode=audioContext.createStereoPanner();
const oscillatorNode=audioContext.createOscillator();
振荡节点连接(立体平移节点);
stereoPannerNode.connect(audioContext.destination);
用于(按钮中的常量按钮){
addEventListener('click',function(){
如果(button.value==='play'){
oscillatorNode.start();
}else if(button.value==='left'){
stereoPannerNode.pan.value=-1;
}else if(button.value==='right'){
stereoPannerNode.pan.value=1;
}否则{
stereoPannerNode.pan.value=0;
}
});
}
播放
只剩下
唯一正确的
两者都是我认为Safari没有更新它的ChannelMergerNode
以遵循规范。已经有一段时间了,但我认为发生的是,由于您只连接一个输入,所以输出只包含一个通道,基本上忽略了未连接的输入0
如果您想让它与Safari一起使用,则需要将某些内容连接到输入0。这可能是连接到零增益节点的振荡器。或者可能是一个缓冲区为全零的循环AudioBufferSourceNode
但我也不是100%肯定这会奏效。如果这不起作用,请使用AudioBufferSourceNode
和一个非常小的值,如1e-20。您只是想在右扬声器上播放一个声音,还是需要ChannelMergerNode
来实现更多的目的?我的音频需求并不是那么简单。我需要只在左右耳上播放,或者同时在左右耳上播放一种声音。@rivka这有什么帮助吗?iOS Safari不支持StereoPannerNode。
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);