iOS/Swift:使用AVAudioEngine在每个硬件上录制16khz的音频
我需要从一个16000Hz采样的微音器中录制一个音频信号。我正在使用AVAudioEngine和Swift:iOS/Swift:使用AVAudioEngine在每个硬件上录制16khz的音频,ios,swift,xcode,avaudioengine,Ios,Swift,Xcode,Avaudioengine,我需要从一个16000Hz采样的微音器中录制一个音频信号。我正在使用AVAudioEngine和Swift: let input = audioEngine.inputNode let mixer = AVAudioMixerNode() audioEngine.attach(mixer) let format = AVAudioFormat(commonFormat: AVAudioCommonFormat.pcmFormatInt16, sampleRate: 16000.0, chann
let input = audioEngine.inputNode
let mixer = AVAudioMixerNode()
audioEngine.attach(mixer)
let format = AVAudioFormat(commonFormat: AVAudioCommonFormat.pcmFormatInt16, sampleRate: 16000.0, channels: 1, interleaved: false)
audioEngine.connect(input, to: mixer, format: input.inputFormat(forBus: 0))
mixer.installTap(onBus: 0, bufferSize: 2048, format: format) {
(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in ... }
不幸的是,应用程序因以下错误而崩溃:
central]54:错误:[0x3b281e40]>avae>AVAudioNode.mm:751:AUSetFormat:错误-10868
***由于未捕获的异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“错误-10868”
我做错了什么
我的想法是使用混频器节点将采样频率从44100 Hz降到16000 Hz
有比使用混合器更好的解决方案吗
编辑:
使用AVAudioCommonFormat.pcmFormatFloat32代替AVAudioCommonFormat.pcmFormat16效果更好。它不会导致错误信息或应用程序崩溃,在我的iPhone 5上,它甚至接收到正确的声音信号。
然而,在Xcode模拟器(iPhone7/iPhoneX)中,我只收到0作为示例。我用麦克风在模拟器中测试了Siri,它工作了,所以麦克风没有损坏。
有什么问题吗?我发现改变采样率唯一有效的方法是
AVAudioSettings.sharedInstance().setPreferredSampleRate(...)
不幸的是,虽然8000、12000、16000、22050、44100似乎都有效,但无法保证您将获得所需的采样率
以下情况不起作用: