使用 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> 是我在这个答案中用来向您展示含义的占位符,但在实际代码中将被替换为 12、.. .

为了更好地解释它让我们分析一下:

let path = findDirectory(filename:userID + "_NO:" + String(recordingNumber)).appendingPathComponent("\(indexPath.row + 1).m4a")
    1. userID + "_NO:" 会产生如下内容:nJNJwVNMrmUGj9uszManQmMOZf52_NO:
    1. String(recordingNumber) 会产生如下内容:1(例如)
    1. 并用上面的方法做 findDirectory(filename: ...) 会在 let soundURL = docDirectory.appendingPathComponent("\(filename).m4a")
    2. 行返回 nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a
    1. 现在最重要的是,您可以执行 .appendingPathComponent("\(indexPath.row + 1).m4a") 这会向看起来已经完成的路径添加更多内容

您可能希望修改逻辑以更好地匹配您期望的路径如何与您的 tableview 一起工作,以便为您的文件编写正确的路径(也许这意味着在您的情况下删除额外的附加您在步骤 4 中执行)