Web音频API ChannelMergerNode在Safari上无法正常工作

问题描述 投票:0回答:1

我使用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/

任何想法如何解决此问题?谢谢。

javascript html5-audio web-audio-api
1个回答
0
投票

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();
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.