Воспроизведение звука с помощью AVAudioPlayer

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

файл: /// var / mobile / Containers / Data / Application / 6C72433F-4DF0-4976-BBDE-36F6B5C23E6D / Documents / nJNJwVNMrmUGj9uszManQmMOZf52_NO: 1.m4a

Когда я пытаюсь воспроизвести аудиофайл с помощью 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
}

person Craig Verveen    schedule 21.03.2020    source источник


Ответы (1)


Если загружаемый файл сохранен как 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, _7 _, ...

Чтобы лучше это объяснить, давайте проанализируем:

let path = findDirectory(filename:userID + "_NO:" + String(recordingNumber)).appendingPathComponent("\(indexPath.row + 1).m4a")
    1. userID + "_NO:" will produce something like: nJNJwVNMrmUGj9uszManQmMOZf52_NO:
    1. String(recordingNumber) will produce something like: 1 (for example)
    1. and doing findDirectory(filename: ...) with the above will give you back nJNJwVNMrmUGj9uszManQmMOZf52_NO:1.m4a as of the line let soundURL = docDirectory.appendingPathComponent("\(filename).m4a")
    1. now on top of it, you do .appendingPathComponent("\(indexPath.row + 1).m4a") which appends more to your path that looked already completed

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

person denis_lor    schedule 21.03.2020
comment
Удаление .appendingPathComponent ((indexPath.row + 1) .m4a) устранило мою проблему! Спасибо - person Craig Verveen; 21.03.2020