我目前有一个 RemoteIO 音频单元配置并工作,它只接受输入,并将其传递给输出,所以当我对着麦克风说话时,我可以通过 iPhone 的耳机听到自己的声音。
我想做的下一步是添加可选效果并创建一个链。我知道它AUGraph
已被弃用,我需要用它kAudioUnitProperty_MakeConnection
来将事物连接在一起,但我有几个关键问题,目前还无法输出音频。
首先:如果我想去 RemoteIO Input -> Reverb -> RemoteIO Output,我需要两个 RemoteIO Audio Unit 实例吗?或者我可以使用同一个吗?我猜只是一个,但是要将不同的东西连接到它的输入和输出范围,但我很难做到这一点。
其次:渲染回调如何发挥作用?我实现了一个渲染回调(AURenderCallbackStruct
并将其设置为kAudioUnitProperty_SetRenderCallback
我的 RemoteIO 音频单元上的属性,并且在回调的实现中,我这样做:
func performRender(
_ ioActionFlags: UnsafeMutablePointer<AudioUnitRenderActionFlags>,
inTimeStamp: UnsafePointer<AudioTimeStamp>,
inBufNumber: UInt32,
inNumberFrames: UInt32,
ioData: UnsafeMutablePointer<AudioBufferList>
) -> OSStatus {
guard let unit = audioUnit else { crash("Asked to render before the AURemoteIO was created.") }
return AudioUnitRender(unit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData)
}
我需要一个渲染回调来完成这项工作吗?我需要两个,一个从 RemoteIO -> Reverb 渲染,另一个渲染回 Reverb -> RemoteIO?
CoreAudio 文档是出了名的粗略,但我很难找到任何关于如何做到这一点的最新信息,而没有AUGraph
这些信息已被弃用。
任何建议都非常感谢!