我正在编写一些有关声音定位的应用程序,我在.isPositional
中使用了SCNAudioPlayer
在SCNNode
上产生了空间音频。这是我的代码:
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的位置音频是否使用这些算法?如果没有,我该如何更改音频以使用这些算法?
答案 0 :(得分:0)
对我来说,问题基本上是声音衰减太弱。我可以从源头移开十或二十米,它的声音几乎和我刚站在上面一样大。这使得3D音频效果很难确定。我的解决方案是更改音频环境节点上的设置。您可以在SCNView
上找到它-叫做audioEnvironmentNode
。
我发现以下设置具有很强的效果,但是您可能需要尝试使用它们以获得适合您的情况的效果:
view.audioEnvironmentNode.distanceAttenuationParameters.maximumDistance = 2
view.audioEnvironmentNode.distanceAttenuationParameters.referenceDistance = 0.1
view.audioEnvironmentNode.renderingAlgorithm = .HRTFHQ
(如果您的3D场景在计算上特别昂贵,您可能要使用HRTF而不是HRTFHQ,或者甚至使用其他一些不太准确但性能更高的算法。在我的情况下,音频质量比图形更为重要。)