2015-10-14 3 views
0

Я пытаюсь записать звук с помощью микрофона и AVAudioRecorder.Настройки AVAudioRecorder пуст после вызова конструктора

Он работает на прошивке 8 но мой код не работает больше на IOS 9.

Словарь recordSettings установлен правильно, тогда я передаю его конструктору AVAudioRecorder:URL:settings.

Но, только после того, как, recorder.settings пуст, сбой утверждение отбрасывается

let recordSettings: [String: AnyObject] = [ 
      AVNumberOfChannelsKey: NSNumber(integer: 2), 
      AVFormatIDKey: NSNumber(integer: Int(kAudioFormatMPEG4AAC)), 
      AVEncoderBitRateKey: NSNumber(integer: 64)] 

var recorder: AVAudioRecorder! 
do { 
    recorder = try AVAudioRecorder(URL: tempURL, settings:recordSettings) // recordSettings.count = 3 
    assert(recorder.settings.count != 0, "Audio Recorder does not provide settings") // assertion failure threw 
} catch let error as NSError { 
    print("error when intitializing recorder: \(error)") 
    return 
} 

Любой человек может мне помочь? Это ошибка?

EDIT: В моем целом кодексе я не тестировал recorder.settings сразу после. Я экземпляр рекордера, как мой код выше, то я сделал это:

recorder.delegate = self 
recorder.prepareToRecord() 
recorder.meteringEnabled = true 

И он выходит из строя в этой строке:

for i in 1...(recorder.settings[AVNumberOfChannelsKey] as! Int) { 
    ... 
} 

Он падает, потому что recorder.settings[AVNumberOfChannelsKey] является nil

ответ

1

Я не уверен, почему вы проверяете свойство настроек, но из файла заголовка AVAudioRecorder, на settings:

эти параметры полностью действительны только тогда, когда prepareToRecord был назван

так что вы должны вызвать prepareToRecord() первый НО это не получится/вернуться false, потому что ваш битрейт слишком низко! Его блок биты в секунду, а не килобит в секунду:

AVEncoderBitRateKey: NSNumber(integer: 64000) 

Это работало на прошивке 8, потому что ваш слишком низкий битрейт был просто отбрасывается. Похоже, что это стало ошибкой в ​​iOS 9.

+0

Упс! Я отредактировал мой пост, я протестировал с утверждением только для публикации, весь мой код отличается. Спасибо, я тестирую ваше решение прямо сейчас! – thedjnivek

+0

Спасибо, я обновил битрейт до 64000 бит – thedjnivek

 Смежные вопросы

  • Нет связанных вопросов^_^