首页 文章

构造函数调用后AVAudioRecorder设置为空

提问于
浏览
0

我正在尝试使用麦克风和 AVAudioRecorder 录制音频 .

它适用于 iOS 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 . 我像上面的代码那样实例化 Logger ,然后我做到了:

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

它崩溃在这一行:

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

它崩溃是因为 recorder.settings[AVNumberOfChannelsKey]nil

1 回答

  • 1

    我'm not sure why you'重新检查设置属性,但是来自 AVAudioRecorder 头文件,在 settings 属性上:

    这些设置仅在调用prepareToRecord时完全有效

    所以你必须首先调用 prepareToRecord() 但它会失败/返回 false ,因为你的比特率太低了!它的单位是每秒位数,而不是每秒千比特:

    AVEncoderBitRateKey: NSNumber(integer: 64000)
    

    这适用于iOS 8,因为太低的比特率被简单地丢弃了 . 看起来它在iOS 9中成了一个错误 .

相关问题