我目前正在从Firebase下载音频文件,将其保存在本地并在表格 View 中列出。我正在像这样获取本地目录:
文件:/// 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")
在表 View 中此值<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: ...)
将把nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a
作为let soundURL = docDirectory.appendingPathComponent("\(filename).m4a")
行现在在
.appendingPathComponent("\(indexPath.row + 1).m4a")
,将更多内容附加到看起来已经完成的路径您可能希望修改逻辑以更好地匹配路径与表 View 的期望方式,以便为文件编写正确的路径(也许在这种情况下,这意味着您要删除在步骤4中执行的多余操作)