我需要录制16,000Hz采样微粒的音频信号。我正在使用AVAudioEngine和Swift:
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 ... }
不幸的是,应用程序因此错误而崩溃:
中央] 54:错误:[0x3b281e40]> avae> AVAudioNode.mm:751:AUSetFormat:错误-10868 ***因未捕获的异常终止应用程序' com.apple.coreaudio.avfaudio',原因:'错误-10868'
我做错了什么?
我的想法是使用混音器节点从44100 Hz到16000Hz进行缩减采样。
有没有比使用调音台更好的解决方案?
修改
使用AVAudioCommonFormat.pcmFormatFloat32而不是AVAudioCommonFormat.pcmFormatInt16效果更好。它不会导致错误消息或应用程序崩溃,并且在我的iPhone 5上它甚至会收到正确的声音信号。 但是,在Xcode模拟器(iPhone 7 / iPhone X)中,我只收到0作为样本。我在带有麦克风的模拟器中测试了Siri并且它可以工作,所以麦克风没有坏掉。 可能是什么问题?
答案 0 :(得分:-1)
我发现唯一可以改变采样率的东西是
AVAudioSettings.sharedInstance().setPreferredSampleRate(...)
不幸的是,尽管似乎8000、12000、16000、22050、44100都可以正常工作,但不能保证将获得所需的采样率。
以下内容无效:
这是iOS 12.3.1。