Воспроизведение аудио с AVAudioPlayer - PullRequest
1 голос
/ 21 марта 2020

В настоящее время я загружаю аудиофайлы из Firebase, сохраняя их локально и перечисляя их в виде таблицы. Я получаю локальный каталог, например:

file: /// var / mobile / Containers / Data / Application / 6C72433F-4DF0-4976-BBDE-36F6B5C23E6D / Documents / nJNJwVNMrmUGj9uszManQmMOZf52_NO: 1.m4a * 100 1004 * Когда я пытаюсь воспроизвести аудиофайл с AVAudioPLayer, я получаю сообщение об ошибке:

Ошибка домена = NSOSStatusErrorDomain Code = 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 Ответ

1 голос
/ 21 марта 2020

Если загружаемый файл сохраняется как 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")
    1. userID + "_NO:" будет производить что-то вроде: nJNJwVNMrmUGj9uszManQmMOZf52_NO:
  • String(recordingNumber) будет производить что-то вроде: 1 (например)
  • и выполнение findDirectory(filename: ...) с вышеприведенным вернет вам nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a на линии let soundURL = docDirectory.appendingPathComponent("\(filename).m4a")
  • теперь поверх этого, вы делаете .appendingPathComponent("\(indexPath.row + 1).m4a"), который добавляет к вашему пути, который выглядел уже завершенным

Вы, вероятно, захотите изменить логи c чтобы лучше соответствовать тому, как вы ожидаете, что путь будет работать с вашим табличным представлением, чтобы вы составили правильный путь для вашего файла (возможно, это означает, что в вашем случае вы удалите лишние добавления, которые вы делаете в шаге 4)

...