我正在尝试使用Core Audio for iOS构建一个非常简单的音频效果链.到目前为止,我已经实现了一个EQ - 压缩 - 限制器链,它在模拟器中运行得非常好.但是在设备上,由于输入和输出硬件格式明显不匹配,应用程序在将节点连接到AVAudioEngine时会崩溃.
'com.apple.coreaudio.avfaudio', reason: 'required condition is false:
IsFormatSampleRateAndChannelCountValid(outputHWFormat)'
Run Code Online (Sandbox Code Playgroud)
举一个基本的例子,我的音频图如下.
Mic -> Limiter -> Main Mixer (and Output)
Run Code Online (Sandbox Code Playgroud)
并使用填充图表
engine.connect(engine.inputNode!, to: limiter, format: engine.inputNode!.outputFormatForBus(0))
engine.connect(limiter, to: engine.mainMixerNode, format: engine.inputNode!.outputFormatForBus(0))
Run Code Online (Sandbox Code Playgroud)
哪个崩溃与上述异常.如果我在连接混音器时使用限制器的格式
engine.connect(engine.inputNode!, to: limiter, format: engine.inputNode!.outputFormatForBus(0))
engine.connect(limiter, to: engine.mainMixerNode, format: limiter.outputFormatForBus(0))
Run Code Online (Sandbox Code Playgroud)
应用程序崩溃时出现kAudioUnitErr_FormatNotSupported错误
'com.apple.coreaudio.avfaudio', reason: 'error -10868'
Run Code Online (Sandbox Code Playgroud)
在连接引擎中的音频节点之前,inputNode有1个通道,采样率为44.100Hz,而outputNode有0个通道,采样率为0Hz(使用outputFormatForBus(0)属性推导).但这可能是因为没有节点连接到输出混音器?在AVAudioSession上设置首选采样率没有任何区别.
这里有什么我想念的吗?我有麦克风访问(使用AVAudioSession.sharedInstance().recordPermission()验证),我已将AVAudioSession模式设置为记录(AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryRecord)).
限制器是一个AVAudioUnitEffect,初始化如下:
let limiter = AVAudioUnitEffect( audioComponentDescription:
AudioComponentDescription(
componentType: kAudioUnitType_Effect, …Run Code Online (Sandbox Code Playgroud)