Я могу успешно записывать звук с помощью 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. Я обнаружил, что не согласен с этим. Короче говоря, используйте абсолютный строковый путь и используйте его последовательно везде (чтение и чтение).