prepareToRecord()
возвращает false без видимых причин. Ни одно из решений других подобных вопросов не работало для меня. Вот что я пробовал:iOS: AVAudioRecorder.prepareToRecord() с ошибкой без ошибок
- Запуск сеанса записи (успешно) непосредственно перед созданием
AVAudioRecorder
. - Выходной каталог существует и доступен для записи.
- Эти
recordSettings
работали для меня в (теперь утерянной) более ранней версии моего кода, но запись вообще остановилась по какой-то причине. - Я использовал
OpenEars
для распознавания речи, но я удалил его из сборки, когда заметил эту проблему.
Версия информация:
- IOS 9,1
- XCode 7.1
- Swift 2,1
Вот мой код. Выход на симуляторе и iPhone ниже.
func setupRecorder(url : String) -> Promise<Void>? {
let (doneRecording, recorderAccept, _) = Promise<Void>.pendingPromise()
let session: AVAudioSession = AVAudioSession.sharedInstance()
if (session.respondsToSelector("requestRecordPermission:")) {
AVAudioSession.sharedInstance().requestRecordPermission({(granted: Bool)-> Void in
if granted {
print("record permission granted")
do {
try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
try session.setActive(true)
self._setupRecorder(url, recorderAccept: recorderAccept)
} catch {
print(error)
}
} else{
print("record permission not granted")
}
})
}
return doneRecording
}
func _setupRecorder(url: String, recorderAccept:() ->()) {
print(url)
let recordSettings = [AVSampleRateKey : NSNumber(float: Float(44100.0)),
AVFormatIDKey : Int(kAudioFormatMPEG4AAC),
AVNumberOfChannelsKey : NSNumber(int: 1),
AVEncoderAudioQualityKey : NSNumber(int: Int32(AVAudioQuality.High.rawValue))];
do {
let soundRecorder = try AVAudioRecorder(URL: NSURL(fileURLWithPath: url), settings: recordSettings)
soundRecorder.delegate = self
if !soundRecorder.prepareToRecord() {
print("prerecord failed")
return
}
if !soundRecorder.record() {
print("record failed")
return
}
self.soundRecorder = soundRecorder
self.recorderAccept = recorderAccept
} catch let error as NSError {
print("AVAudioRecorder error: \(error.localizedDescription)")
}
}
выход iPhone:
record permission granted
file:///var/mobile/Containers/Data/Application/1DC339E6-555F-47AA-8D4F-4A8E1E847919/Library/Caches/iM3xWVKCGr.aac
prerecord failed
Simulator вывода: каталог разрешения
record permission granted
file:///Users/adrian/Library/Developer/CoreSimulator/Devices/5D035D65-60FA-413E-9CD7-C2C4277EC25F/data/Containers/Data/Application/6DF6374E-3BCF-4BD0-B826-FE1622F134B4/Library/Caches/1ey96W904T.aac
prerecord failed
Cache:
drwxr-xr-x 53 adrian admin 1802 Oct 29 14:12 /Users/adrian/Library/Developer/CoreSimulator/Devices/5D035D65-60FA-413E-9CD7-C2C4277EC25F/data/Containers/Data/Application/6DF6374E-3BCF-4BD0-B826-FE1622F134B4/Library/Caches/
Я хотел бы услышать, если кто-то есть предложение ,
Запись ранее работала как на тренажере, так и на устройстве с указанными выше настройками. Когда я получу шанс, я с нуля создам новое приложение для записи. – user2683747
Выяснил это. Спасибо, Мэтт. – user2683747