Swift:如何使位置音频更加逼真以实现声音定位?

时间:2018-11-08 07:26:58

标签: swift audio localization stereo-3d

我正在编写一些有关声音定位的应用程序,我在.isPositional中使用了SCNAudioPlayerSCNNode上产生了空间音频。这是我的代码:

func spatialAudio(inputNode: SCNNode){
    let audio = SCNAudioSource(fileNamed: "source.wav")
    audio!.isPositional = true
    audio?.load()
    let player = SCNAudioPlayer(source: audio!)
    inputNode.addAudioPlayer(player)
}

但是空间音频的结果不是很好,因为用户很难定位声源。还有其他方法可以在Swift中产生更逼真的空间音频吗?

我听说过一些用于声音定位的算法,例如与头部相关的传递函数(HRTF),耳间时间差(ITD)和耳间水平差(ILD)。 Swift的位置音频是否使用这些算法?如果没有,我该如何更改音频以使用这些算法?

1 个答案:

答案 0 :(得分:0)

对我来说,问题基本上是声音衰减太弱。我可以从源头移开十或二十米,它的声音几乎和我刚站在上面一样大。这使得3D音频效果很难确定。我的解决方案是更改音频环境节点上的设置。您可以在SCNView上找到它-叫做audioEnvironmentNode

我发现以下设置具有很强的效果,但是您可能需要尝试使用它们以获得适合您的情况的效果:

view.audioEnvironmentNode.distanceAttenuationParameters.maximumDistance = 2
view.audioEnvironmentNode.distanceAttenuationParameters.referenceDistance = 0.1
view.audioEnvironmentNode.renderingAlgorithm = .HRTFHQ

(如果您的3D场景在计算上特别昂贵,您可能要使用HRTF而不是HRTFHQ,或者甚至使用其他一些不太准确但性能更高的算法。在我的情况下,音频质量比图形更为重要。)