2015-10-14 55 views
0

我試圖使用麥克風和AVAudioRecorder錄製音頻。構造函數調用後AVAudioRecorder設置爲空

它適用於iOS的,但我的代碼不會對工作了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 
} 

任何人都可以幫我嗎?這是一個錯誤嗎?

編輯:在我的整個代碼中,我沒有測試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) 

這個工作在iOS 8,因爲你太低比特率被換下來。看起來它變成了iOS 9中的錯誤。

+0

糟糕!我編輯了我的帖子,我測試了一個帖子,我的整個代碼是不同的。謝謝,我現在測試你的解決方案! – thedjnivek

+0

謝謝,我將比特率更新爲64000位 – thedjnivek