【发布时间】:2017-02-15 01:56:33
【问题描述】:
我正在尝试制作一个简单的游戏,它的击打声音在您击打某物时具有不同的音高。我以为这很简单,但结果却是一大堆东西(其中大部分是我完全从别人那里抄来的):
func hitSound(value: Float) {
let audioPlayerNode = AVAudioPlayerNode()
audioPlayerNode.stop()
engine.stop() // This is an AVAudioEngine defined previously
engine.reset()
engine.attach(audioPlayerNode)
let changeAudioUnitTime = AVAudioUnitTimePitch()
changeAudioUnitTime.pitch = value
engine.attach(changeAudioUnitTime)
engine.connect(audioPlayerNode, to: changeAudioUnitTime, format: nil)
engine.connect(changeAudioUnitTime, to: engine.outputNode, format: nil)
audioPlayerNode.scheduleFile(file, at: nil, completionHandler: nil) // File is an AVAudioFile defined previously
try? engine.start()
audioPlayerNode.play()
}
由于此代码似乎停止播放当前正在播放的任何声音以播放新声音,有没有办法我可以改变这种行为,使其不会停止播放任何东西?我尝试删除 engine.stop 和 engine.reset 位,但这只会使应用程序崩溃。此外,频繁调用此代码时速度非常慢。我可以做些什么来加快速度吗?非常频繁地需要这种敲击声。
【问题讨论】:
-
如果我听起来像一个对代码一无所知的家伙,只是要求别人做一些事情,我很抱歉,我什至没有接触任何音频功能然而,所以我只是四处寻找,试图弄清楚是什么。到目前为止,Swift 似乎与 Lua 非常相似,而且我还做了一些其他的工作,我只是被这个音频问题所困扰。
标签: swift xcode audio avfoundation pitch