swift - 斯威夫特:如何让位置音频更真实地进行声音定位?
问题描述
我正在编写一些关于声音定位的应用程序,并用于.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 的定位音频是否使用这些算法?如果没有,我怎么能改变音频以使用这些算法?
解决方案
对我来说,问题基本上是声音衰减太弱了。我可以从源头移动十到二十米,它几乎和我在它上面时一样响亮。这使得 3D 音频效果很难确定。我的解决方案是更改音频环境节点上的设置。你可以在你的SCNView
- 它被称为audioEnvironmentNode
。
我发现以下设置提供了非常强大的效果,但您可能希望使用它们来获得适合您情况的效果:
view.audioEnvironmentNode.distanceAttenuationParameters.maximumDistance = 2
view.audioEnvironmentNode.distanceAttenuationParameters.referenceDistance = 0.1
view.audioEnvironmentNode.renderingAlgorithm = .HRTFHQ
(如果您的 3D 场景的计算量特别大,您可能希望使用 HRTF 而不是 HRTFHQ,或者甚至是其他一些不太准确但性能更高的算法。在我的情况下,音频质量比图形更重要。)
推荐阅读
- javascript - 如何使用 JS 预测在线 TensorFlow 模型
- c# - 如何在 BackgroundWorker 中更新 My DataTable 中的记录并显示进度
- android - Ionic 4 从图库中选择多个图像,图像选择器不起作用
- docker - 容器未启动时的 nginx proxy_pass 和 docker 错误
- sql - 如何使用 Oracle REGEXP 替换未放置在模式之间的单词和模式内的不同单词?
- .net-core - 在区域控制器索引中找不到页面错误
- git - 当我引入一个错误并能够回到我之前的提交时,我想保存我的工作。我应该如何用 git 解决这个问题?
- php - 使用 php exec 检查 npm 插件是否存在
- forth - 用数字填充数组的问题
- python - 使用 Mechanicalsoup 导航多个页面/表单