我試圖使用AVAudioPlayerNode
播放Assets.xcassets
資產目錄中的聲音,但我無法弄清楚如何操作。如何使用AVAudioPlayerNode從資產目錄播放聲音?
我一直在使用AVAudioPlayer
,它可以與NSDataAsset
這樣的初始化:
let sound = NSDataAsset(name: "beep")!
do {
let player = try AVAudioPlayer(data: sound.data, fileTypeHint: AVFileTypeWAVE)
player.prepareToPlay()
player.play()
} catch {
print("Failed to create AVAudioPlayer")
}
我想用一個AVAudioPlayerNode
,而不是(對變調等原因)。我可以創建發動機和掛鉤節點OK:
var engine = AVAudioEngine()
func playSound(named name: String) {
let mixer = engine.mainMixerNode
let playerNode = AVAudioPlayerNode()
engine.attach(playerNode)
engine.connect(playerNode, to: mixer, format: mixer.outputFormat(forBus: 0))
// play the file (this is what I don't know how to do)
}
它看起來像使用的方法爲播放文件是playerNode.scheduleFile()
。這需要一個AVAudioFile
,所以我想我會嘗試做一個。但AVAudioFile
的初始化程序需要一個URL。據我所知,資產目錄中的資產不能通過URL獲得。我可以直接使用NSDataAsset
獲取數據,但似乎沒有辦法使用它來填充AVAudioFile
。
是否可以使用AVAudioPlayerNode
播放資產目錄中的聲音?如果是這樣,怎麼樣?