构造函数调用后 AVAudioRecorder 设置为空
AVAudioRecorder settings empty after constructor call
我正在尝试使用麦克风和 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
}
谁能帮帮我?是错误吗?
编辑: 在我的整个代码中我没有测试 recorder.settings
之后。我像上面的代码一样实例化了记录器,然后我做到了:
recorder.delegate = self
recorder.prepareToRecord()
recorder.meteringEnabled = true
它在这一行崩溃了:
for i in 1...(recorder.settings[AVNumberOfChannelsKey] as! Int) {
...
}
它崩溃了,因为 recorder.settings[AVNumberOfChannelsKey]
是 nil
我不确定你为什么要检查设置 属性,但是
来自 AVAudioRecorder
头文件,在 settings
属性:
these settings are fully valid only when prepareToRecord
has been called
所以你必须先调用 prepareToRecord()
但它会 fail/return false
,因为你的比特率太低了!它的单位是比特每秒,而不是千比特每秒:
AVEncoderBitRateKey: NSNumber(integer: 64000)
这适用于 iOS 8,因为您的比特率太低被简单地丢弃了。看起来它在 iOS 9.
中变成了一个错误
我正在尝试使用麦克风和 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
}
谁能帮帮我?是错误吗?
编辑: 在我的整个代码中我没有测试 recorder.settings
之后。我像上面的代码一样实例化了记录器,然后我做到了:
recorder.delegate = self
recorder.prepareToRecord()
recorder.meteringEnabled = true
它在这一行崩溃了:
for i in 1...(recorder.settings[AVNumberOfChannelsKey] as! Int) {
...
}
它崩溃了,因为 recorder.settings[AVNumberOfChannelsKey]
是 nil
我不确定你为什么要检查设置 属性,但是
来自 AVAudioRecorder
头文件,在 settings
属性:
these settings are fully valid only when
prepareToRecord
has been called
所以你必须先调用 prepareToRecord()
但它会 fail/return false
,因为你的比特率太低了!它的单位是比特每秒,而不是千比特每秒:
AVEncoderBitRateKey: NSNumber(integer: 64000)
这适用于 iOS 8,因为您的比特率太低被简单地丢弃了。看起来它在 iOS 9.
中变成了一个错误