使用 AVAudioPlayer 播放音频
Posted
技术标签:
【中文标题】使用 AVAudioPlayer 播放音频【英文标题】:Playing audio with AVAudioPlayer 【发布时间】:2020-03-21 17:49:00 【问题描述】:我目前正在从 Firebase 下载音频文件,并将它们保存在本地并在表格视图中列出。我得到这样的本地目录:
file:///var/mobile/Containers/Data/Application/6C72433F-4DF0-4976-BBDE-36F6B5C23E6D/Documents/nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a
当我尝试使用 AVAudioPLayer 播放音频文件时出现错误:
错误域=NSOSStatusErrorDomain 代码=2003334207 "(null)"
我已经坚持了三天,非常感谢有人指出我正确的方向。如果需要任何进一步的代码来帮助解决这个问题,请告诉我。谢谢。
这是我播放音频的代码:
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
【问题讨论】:
【参考方案1】:如果您下载的文件保存为nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a
,您为什么要在其顶部附加:.appendingPathComponent("\(indexPath.row + 1).m4a")
这个值<row_value + 1>.m4a
在您的tableview 中?
就像现在您正在尝试查找保存为: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 步)
【讨论】:
取出 .appendingPathComponent("(indexPath.row + 1).m4a") 解决了我的问题!谢谢以上是关于使用 AVAudioPlayer 播放音频的主要内容,如果未能解决你的问题,请参考以下文章