webapi三维空间化:如何应用距离延迟



目标

我正在尝试建立一个具有空间化音频的网站。

测量

我正在使用WebAudioAPI的PannerNode

我的音频管道看起来像:audioTrack → PannerNode → audioContext.destination

预期

我以为PannerNode会尽一切努力创造3D音频体验。

问题

我觉得左右扬声器之间没有声音延迟。由于两只耳朵之间有一定的空间距离而产生的声音延迟。

问题

  1. 我的感觉错了吗,左右扬声器之间实际上有延迟?(也许我的设置错误/不是最佳设置。(
  2. 有没有一种方便的方法来实现声音延迟,或者我需要手动通过track -> PannerNode -> SplitAudioInChannels -> ApplySoundDelayPerChannel -> Output

代码

我在这里基本上使用的是mozilla教程中的代码。

PannerNode的设置如下:

var panner = new PannerNode(audioCtx, {
panningModel: 'HRTF',
distanceModel: 'linear',
positionX: audioSource.x,
positionY: audioSource.y,
positionZ: 0,
orientationX: 0.0,
orientationY: 0.0,
orientationZ: 0.0, // -1 = face out of the screen
refDistance: 1,
maxDistance: 400,
rolloffFactor: 10,
coneInnerAngle: 360, //60,
coneOuterAngle: 360, //90,
coneOuterGain: 0.3
})   

要听到空间化效果,您需要更改方向和/或位置。为了看看你的摇拍器是否在做什么,我会看看Canopy,看看摇拍器的左右通道。调整位置和/或方向应显示左右通道之间存在延迟差异。

下面是一个在Canopy中使用的简短示例,显示左通道和右通道具有不同的延迟。将其粘贴到代码窗口中,然后按左侧的三角形进行渲染。您将在顶部看到波形,每个通道一个波形。如果放大,可以看到第一个通道与第二个通道不同时启动。

// @channels 2
// @duration 1.0
// @sampleRate 44100
let osc = new OscillatorNode(context, {type: "square");

let p = new PannerNode(context);
p.panningModel = "HRTF";
p.positionX.value = 10;
p.positionY.value = 10;
p.positionZ.value = 10;
osc.connect(p).connect(context.destination);
osc.start();

最新更新