AVAudioRecorder/AVAudioPlayer не может открыть ранее сохраненный файл

Я могу успешно записывать звук с помощью AVAudioRecorder. Я могу успешно воспроизвести эту запись с помощью AVAudioPlayer. Это сохраняется в папке документов:

FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)

Однако, когда я пытаюсь повторно открыть этот файл (чтобы записать его или воспроизвести), я не могу этого сделать. Я получаю состояние записи или состояние проигрывателя, чтобы вернуть false.

Пример имени файла/URL:

file:///var/mobile/Containers/Data/Application/30025787-C4F5-4F23-A345-C38EE44A180B/Documents/E678B939-730D-40D8-84EC-DE79FE4BDE3D.m4a

Обратите внимание, что я пытаюсь повторно открыть файл следующим образом:

self.audioRecorder = try AVAudioRecorder(url: self.recordedFileURL!, settings: settings)
self.audioRecorder.delegate = self
self.audioRecorder.isMeteringEnabled = true
let prepared = self.audioRecorder.prepareToRecord()
print("prepared to record = \(prepared)") // this returns FALSE when i am trying to re-open. But returns TRUE when i record for the first time.

Когда я пытаюсь открыть файл с помощью AVAudioPlayer, я получаю сообщение об ошибке:

The operation couldn’t be completed. (OSStatus error 2003334207.)

Код для открытия файла с использованием сохраненного URL-адреса:

if (self.recordedFileURL != nil) {
  do {
    self.audioPlayer = try AVAudioPlayer(contentsOf: self.recordedFileURL!)
    self.audioPlayer.delegate = self
    self.audioPlayer.volume = 1.0
    self.audioPlayer.prepareToPlay()
  }
  catch let error {
    print("Play audio error: " + error.localizedDescription)
  }
}

* Обновлено *

Я начинаю думать, что файл на самом деле не сохраняется в папке документов. Я вижу эту ошибку в окне вывода:

fatal error: unexpectedly found nil while unwrapping an Optional value
2016-11-07 09:38:28.177535 fatal error: unexpectedly found nil while unwrapping an Optional value

Как проверить наличие этого файла в папке документов?

* Обновлено *

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

* обновлено 2 *

Я нашел более точную ссылку здесь.

* РЕШЕНО *

Я считаю, что было пару (2) проблем.

1) Я убедился, что не использую путь к уже существующему файлу. Если я использую существующий путь (который является путем к записанному звуку) для инициализации рекордера, он переопределит любой записанный звук. Я должен был использовать отдельный/уникальный путь для любой новой записи.

2) Мне нужно было убедиться, что я работаю с правильными путями URL. Я обнаружил, что не согласен с этим. Короче говоря, используйте абсолютный строковый путь и используйте его последовательно везде (чтение и чтение).


person AlvinfromDiaspar    schedule 07.11.2016    source источник
comment
Когда я записываю, я использую категорию AVAudioSessionCategoryRecord. Когда я воспроизвожу его, я использую AVAudioSessionCategoryPlayback. Опять же, запись и воспроизведение работают, когда я впервые создаю запись. Но если бы я открыл существующий URL-адрес (сохраненный в папке документов), это произошло бы, когда я не смог бы открыть/записать/воспроизвести.   -  person AlvinfromDiaspar    schedule 07.11.2016