如何在iOS的Web Audio实现中平移音频?

时间:2018-10-15 03:52:23

标签: ios web-audio web-audio-api

WebAudio规范为两通道L / R平移(StereoPannerNode)和3D空间平移(PannerNode)提供了API调用。尽管如此,我找不到在iOS上可行的方法。

关于正常L / R平移,MDN says表示2D audioContext.createStereoPanner()未在iOS中实现。 (或者在台式机Safari上。)也许您可以通过直接调用PannerNode constructor来创建一个,但是我怀疑至少在iOS上能行得通。

AudioContext panning audio of playing media显示了一种使用通道合并和通道分离器而无需StereoPannerNode进行L / R平移的方法。但是,iOS上未实现createChannelMerger的MDN says。也许您可以直接致电ChannelMergeNode constructor,但我也怀疑至少在iOS上可以使用。

对于3D平移,MDN says iOS不支持audioContext.createPanner。 (而桌面Safari则是。)同样,也许您可​​以直接使用PannerNode构造函数,但我对此表示怀疑。因此,我认为3D平移也不起作用。

1 个答案:

答案 0 :(得分:1)

StereoPannerNode是尚不可用,但3D PannerNode应该正常工作(未作为构造还,但使用.createPanner()方法)。例如,这是你如何能实现立体声声像与iOS上的3D声像:

var pan = -1;  // This should be in range [-1, 1]

if (context.createStereoPanner) {
    var panner = context.createPanner();
    panner.pan.value = pan;
} else {
    var panner = context.createPanner();
    panner.panningModel = 'equalpower';
    panner.setPosition(pan, 0, 1 - Math.abs(pan));
}

someSource.connect(panner);
panner.connect(context.destination);

我认为MDN支持表不准确或有点过时。在PannerNode docs at MDN中查找,支持表的外观与您链接的表不同。