首页 > 解决方案 > WebAudio panner 无法与 WebRTC 音频流一起正常工作

问题描述

我有一个问题,我的音频平移器没有正确平移给定值。

目前,如果我将 positionX.value 设置为 1000,则音频会在中间播放,并且根本不会平移到右声道。

现在,如果我将 positionX.value 设置为 0.5 或 0.9 或 1,音频会在右声道播放(尽管不完全,因为我仍然可以在左边听到一点,比平时更多)。

我不明白为什么它只能从 -1 到 1 工作,任何高于音频返回中心的数字。知道为什么吗?而且我确信它应该适用于更高的数字,因为我之前已经在不同的情况下测试过它,并且没有说它不应该出现在文档中。

peerConnection.onaddstream = (event) => {
    var panner = this.aContext.createPanner();
    panner.panningModel = 'HRTF';
    panner.distanceModel = 'inverse';
    panner.refDistance = 1;
    panner.maxDistance = 10000;
    panner.rolloffFactor = 1;
    panner.coneInnerAngle = 360;
    panner.coneOuterAngle = 0;
    panner.coneOuterGain = 0;
    
    // here is how Im setting the position, using -1 to 1 works, nothing greater tho
    panner.positionX.value = 10000;

    var source = this.aContext.createMediaStreamSource(event.stream);

    source.connect(panner);
    panner.connect(this.aContext.destination);

    const recvAudio = new Audio();
    recvAudio.srcObject = source.mediaStream;
    recvAudio.autoplay = true;
}

标签: javascriptwebrtcweb-audio-api

解决方案


您需要设置监听器的位置!它在哪里决定了源节点的平移。

默认情况下,侦听器的位置是 (0,0,0),这就是为什么当您将源节点设置为低值时可以在此处使用它。

您可以设置监听器所在的位置:

var const listener = this.aContext.listener;
listener.setPosition(x,y,z);

推荐阅读