使用 AVAudioPlayer 播放音频
Playing audio with AVAudioPlayer
我目前正在从 Firebase 下载音频文件,将它们保存在本地并在表格视图中列出。我得到这样的本地目录:
文件:///var/mobile/Containers/Data/Application/6C72433F-4DF0-4976-BBDE-36F6B5C23E6D/Documents/nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a
当我尝试使用 AVAudioPLayer 播放音频文件时出现错误:
错误域=NSOSStatusErrorDomain 代码=2003334207“(空)”
我已经坚持了三天,非常感谢有人为我指出正确的方向。如果需要任何进一步的代码来帮助解决这个问题,请告诉我。谢谢
这是我播放音频的代码:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//Access the cell tapped on and the path to the recording the user wants to listen to
let path = findDirectory(filename:userID + "_NO:" + String(recordingNumber)).appendingPathComponent("\(indexPath.row + 1).m4a")
do {
self.audioPlayer = try AVAudioPlayer(contentsOf: path)
self.audioPlayer.play()
} catch let error as NSError {
print(error.description)
}
}
我查找目录的代码在这里:
func findDirectory(filename:String) -> URL {
let fileManager = FileManager.default
let urls = fileManager.urls(for: .documentDirectory, in: .userDomainMask)
let docDirectory = urls[0] as URL
let soundURL = docDirectory.appendingPathComponent("\(filename).m4a")
print(soundURL)
return soundURL
}
如果您下载的文件保存为 nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a
为什么要通过以下方式附加到它的顶部:.appendingPathComponent("\(indexPath.row + 1).m4a")
这个值 <row_value + 1>.m4a
在您的表格视图中?
就像现在您正在尝试查找另存为的文件:nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a<row_value + 1>.m4a
.
这里的 <row_value + 1>
是我在这个答案中用来向您展示含义的占位符,但在实际代码中将被替换为 1
、2
、.. .
为了更好地解释它让我们分析一下:
let path = findDirectory(filename:userID + "_NO:" + String(recordingNumber)).appendingPathComponent("\(indexPath.row + 1).m4a")
userID + "_NO:"
会产生如下内容:nJNJwVNMrmUGj9uszManQmMOZf52_NO:
String(recordingNumber)
会产生如下内容:1
(例如)
- 并用上面的方法做
findDirectory(filename: ...)
会在 let soundURL = docDirectory.appendingPathComponent("\(filename).m4a")
行返回 nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a
- 现在最重要的是,您可以执行
.appendingPathComponent("\(indexPath.row + 1).m4a")
这会向看起来已经完成的路径添加更多内容
您可能希望修改逻辑以更好地匹配您期望的路径如何与您的 tableview 一起工作,以便为您的文件编写正确的路径(也许这意味着在您的情况下删除额外的附加您在步骤 4 中执行)
我目前正在从 Firebase 下载音频文件,将它们保存在本地并在表格视图中列出。我得到这样的本地目录:
文件:///var/mobile/Containers/Data/Application/6C72433F-4DF0-4976-BBDE-36F6B5C23E6D/Documents/nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a
当我尝试使用 AVAudioPLayer 播放音频文件时出现错误:
错误域=NSOSStatusErrorDomain 代码=2003334207“(空)”
我已经坚持了三天,非常感谢有人为我指出正确的方向。如果需要任何进一步的代码来帮助解决这个问题,请告诉我。谢谢
这是我播放音频的代码:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//Access the cell tapped on and the path to the recording the user wants to listen to
let path = findDirectory(filename:userID + "_NO:" + String(recordingNumber)).appendingPathComponent("\(indexPath.row + 1).m4a")
do {
self.audioPlayer = try AVAudioPlayer(contentsOf: path)
self.audioPlayer.play()
} catch let error as NSError {
print(error.description)
}
}
我查找目录的代码在这里:
func findDirectory(filename:String) -> URL {
let fileManager = FileManager.default
let urls = fileManager.urls(for: .documentDirectory, in: .userDomainMask)
let docDirectory = urls[0] as URL
let soundURL = docDirectory.appendingPathComponent("\(filename).m4a")
print(soundURL)
return soundURL
}
如果您下载的文件保存为 nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a
为什么要通过以下方式附加到它的顶部:.appendingPathComponent("\(indexPath.row + 1).m4a")
这个值 <row_value + 1>.m4a
在您的表格视图中?
就像现在您正在尝试查找另存为的文件:nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a<row_value + 1>.m4a
.
这里的 <row_value + 1>
是我在这个答案中用来向您展示含义的占位符,但在实际代码中将被替换为 1
、2
、.. .
为了更好地解释它让我们分析一下:
let path = findDirectory(filename:userID + "_NO:" + String(recordingNumber)).appendingPathComponent("\(indexPath.row + 1).m4a")
userID + "_NO:"
会产生如下内容:nJNJwVNMrmUGj9uszManQmMOZf52_NO:
String(recordingNumber)
会产生如下内容:1
(例如)
- 并用上面的方法做
findDirectory(filename: ...)
会在let soundURL = docDirectory.appendingPathComponent("\(filename).m4a")
行返回
nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a
- 并用上面的方法做
- 现在最重要的是,您可以执行
.appendingPathComponent("\(indexPath.row + 1).m4a")
这会向看起来已经完成的路径添加更多内容
- 现在最重要的是,您可以执行
您可能希望修改逻辑以更好地匹配您期望的路径如何与您的 tableview 一起工作,以便为您的文件编写正确的路径(也许这意味着在您的情况下删除额外的附加您在步骤 4 中执行)