javascript - 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;
}
解决方案
您需要设置监听器的位置!它在哪里决定了源节点的平移。
默认情况下,侦听器的位置是 (0,0,0),这就是为什么当您将源节点设置为低值时可以在此处使用它。
您可以设置监听器所在的位置:
var const listener = this.aContext.listener;
listener.setPosition(x,y,z);
推荐阅读
- jenkins - 如何通过自动化复制詹金斯设置
- java - Android - 将参数发送到 php 脚本以在查询中使用它
- asp.net - 如何在 vb.net 中使用服务器端制作数据引导程序
- mysql - 将一个字段拆分为基于另一字段中的值的多列
- angular - 在 UI 路由器,Angular 5 中回调或从子级到父级?
- angular - 如何从区分大小写的查询参数变量中获取值?
- powershell - Powershell Write-Error Write-Warning 自定义格式
- scala - scala中的List[Row]到RDD[CassandrRow]转换
- php - 如何将 PHP 父对象转换/转换为子对象?
- javascript - 使用 javascript 或 jquery 获取数组中的复选框状态