使用 AVAudioPlayer 播放本地音频文件
Play local audio file with AVAudioPlayer
我正在模拟器中测试我的应用程序。
我正在下载文件并以本地方式获取文件,如下所示:
file:///Users/administrator/Library/Developer/CoreSimulator/Devices/4CDF286B-543F-4137-B5E2-C312E19B992F/data/Containers/Data/Application/E5F13797-A6A8-48A1-B3C3-FBC3D7A03151/Documents/4d13e04980d3.mp3
现在我想用 AVAudioPlayer 播放这个文件,但我总是收到这个错误:
file:///
Error Domain=NSOSStatusErrorDomain Code=2003334207 "(null)"
播放代码:
var alertSound = NSURL(fileURLWithPath: "file:///Users/administrator/Library/Developer/CoreSimulator/Devices/4CDF286B-543F-4137-B5E2-C312E19B992F/data/Containers/Data/Application/E5F13797-A6A8-48A1-B3C3-FBC3D7A03151/Documents/4d13e04980d3.mp3")
print(alertSound)
var error:NSError?
do {
try audioPlayer = AVAudioPlayer(contentsOfURL: alertSound)
audioPlayer.prepareToPlay()
audioPlayer.play()
} catch {
print(error)
}
我应该怎么播放?
看看 NSFileManager。 URLForDirectory:inDomain:appropriateForURL:create:error:
方法是您应该使用的方法。
在iOS8下,您保存的路径在启动后将无效。您看到的 ID "E5F13797-A6A8-48A1-B3C3-FBC3D7A03151" 会随着每次启动而改变。
解决方案是保存文件名而不是完整路径,然后通过获取 Documents(或 tmp)文件夹的路径并将文件名附加到它来重新创建 URL 或完整路径。
// create the soundFileURL for the word
let toAppendString = "\(String)" //
let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
soundFileURL = documentsDirectory.URLByAppendingPathComponent(toAppendString)
do {
self.player = try AVAudioPlayer(contentsOfURL: soundFileURL)
player.prepareToPlay()
player.volume = 1.0
player.play()
} catch let error as NSError {
print(error)
}
let fileName = ("FILE_NAME.mp3")
let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let soundFileURL = documentsDirectory.URLByAppendingPathComponent(fileName)
AudioCenter.player.playURL(soundFileURL)
我正在模拟器中测试我的应用程序。
我正在下载文件并以本地方式获取文件,如下所示:
file:///Users/administrator/Library/Developer/CoreSimulator/Devices/4CDF286B-543F-4137-B5E2-C312E19B992F/data/Containers/Data/Application/E5F13797-A6A8-48A1-B3C3-FBC3D7A03151/Documents/4d13e04980d3.mp3
现在我想用 AVAudioPlayer 播放这个文件,但我总是收到这个错误:
file:///
Error Domain=NSOSStatusErrorDomain Code=2003334207 "(null)"
播放代码:
var alertSound = NSURL(fileURLWithPath: "file:///Users/administrator/Library/Developer/CoreSimulator/Devices/4CDF286B-543F-4137-B5E2-C312E19B992F/data/Containers/Data/Application/E5F13797-A6A8-48A1-B3C3-FBC3D7A03151/Documents/4d13e04980d3.mp3")
print(alertSound)
var error:NSError?
do {
try audioPlayer = AVAudioPlayer(contentsOfURL: alertSound)
audioPlayer.prepareToPlay()
audioPlayer.play()
} catch {
print(error)
}
我应该怎么播放?
看看 NSFileManager。 URLForDirectory:inDomain:appropriateForURL:create:error:
方法是您应该使用的方法。
在iOS8下,您保存的路径在启动后将无效。您看到的 ID "E5F13797-A6A8-48A1-B3C3-FBC3D7A03151" 会随着每次启动而改变。
解决方案是保存文件名而不是完整路径,然后通过获取 Documents(或 tmp)文件夹的路径并将文件名附加到它来重新创建 URL 或完整路径。
// create the soundFileURL for the word
let toAppendString = "\(String)" //
let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
soundFileURL = documentsDirectory.URLByAppendingPathComponent(toAppendString)
do {
self.player = try AVAudioPlayer(contentsOfURL: soundFileURL)
player.prepareToPlay()
player.volume = 1.0
player.play()
} catch let error as NSError {
print(error)
}
let fileName = ("FILE_NAME.mp3")
let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let soundFileURL = documentsDirectory.URLByAppendingPathComponent(fileName)
AudioCenter.player.playURL(soundFileURL)