【发布时间】:2018-01-20 16:02:54
【问题描述】:
我正在尝试使用 AVAudioPlayerNode 播放来自 Assets.xcassets 资产目录的声音,但我不知道该怎么做。
我一直在使用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 播放资产目录中的声音?如果有,怎么做?
【问题讨论】:
标签: swift avfoundation avaudioplayer avaudioplayernode avaudiofile