我试图使用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
播放资产目录中的声音?如果是这样,怎么样?