SceneKit:位置音频不起作用
Posted
技术标签:
【中文标题】SceneKit:位置音频不起作用【英文标题】:SceneKit: positional audio won't work 【发布时间】:2018-05-28 13:06:15 【问题描述】:我正在尝试让 SceneKit 在我的一个角色移动时播放脚步声。当他们靠近(靠近播放器)时,音频的音量应该会增加。
这就是我设置音频源的方式:
private lazy var stepAudiosource:SCNAudioSource =
let tempAudioSource = SCNAudioSource(fileNamed: "art.scnassets/Audio/step_enemy.wav")!
tempAudioSource.volume = 0.3
tempAudioSource.rate = 0.1
tempAudioSource.loops = true
tempAudioSource.shouldStream = false
tempAudioSource.isPositional = true
return tempAudioSource
()
一开始我尝试使用 playAudioSource 播放音频,给动作一个键并尝试在每次角色停止时将其移除。不幸的是,即使删除动作似乎也没有停止音频播放,所以我这样做了:
private var isWalking:Bool = false
didSet
if oldValue != isWalking
if isWalking
addAnimation(runAnimation, forKey: "run")
let sfxPlayer = SCNAudioPlayer(source: stepAudioSource)
characterNode.addAudioPlayer(sfxPlayer)
else
removeAnimation(forKey: "run", blendOutDuration: 0.2)
removeAllAudioPlayers()
音频文件是单声道的,因为我发现位置音频不适用于双声道音频。 shouldStream 属性设置为 false。
这在大多数情况下确实有效。不幸的是,如果节点开始距离玩家太远,脚步音频将不会开始播放,并且当它们真正靠近时不会听到任何声音。我做错了什么?
【问题讨论】:
【参考方案1】:试试这个方法:
let tempAudioSource = SCNAudioSource(fileNamed: "art.scnassets/Audio/step_enemy.wav")!
tempAudioSource.volume = 0.3
tempAudioSource.rate = 0.1
tempAudioSource.loops = true
tempAudioSource.isPositional = true
tempAudioSource.shouldStream = false
tempAudioSource.load() //loads audio data and prepares it for playing...
let player = SCNAudioPlayer(source: tempAudioSource)
whatEverNode.addAudioPlayer(player)
不要忘记audio listener
节点——该节点代表听众在场景中的位置,用于位置音频效果。
var audioListener: SCNNode? get set
【讨论】:
如何设置audioListner?我找不到任何示例。。谢谢? 嗨@DamianoMiazzi,请将其发布为 SO 问题。 您好,我在这里发布问题:***.com/questions/66191859/…以上是关于SceneKit:位置音频不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在特定时间播放音频文件的 JavaScript 程序似乎不起作用