我创建了一个简单的AUGraph-远程IO、混音器和一个回调(将麦克风输入写入文件)-但我不认为它的配置是我想象的那样。我试图使用CAShow()来了解我实际创建了什么,但我很难将它的输出与我认为配置的内容以及运行应用程序时实际发生的事情相协调。
我相信我的AUGraph由以下连接组成(从扬声器向后工作到麦克风):
- 混合器单元的输出总线连接到远程IO输出元件
- 在混合器单元的输入上设置的回调
- 远程IO输入元件的输出总线连接到回调
以下是配置和初始化AUGraph后CAShow()的输出:
AudioUnitGraph 0x8EA7000:
Member Nodes:
node 1: 'auou' 'rioc' 'appl', instance 0xa87f530 O I
node 2: 'aumx' 'mcmx' 'appl', instance 0xa880420 O I
Connections:
node 2 bus 0 => node 1 bus 0 [ 1 ch, 44100 Hz, 'lpcm' (0x0000000C) 16-bit little-endian signed integer]
Input Callbacks:
{0x28c0, 0xa87df40} => node 2 bus 0 [1 ch, 44100 Hz]
CurrentState:
mLastUpdateError=0, eventsToProcess=F, isRunning=F
它似乎应该显示从远程IO输入元素的输出总线到回调的连接,但它没有。我知道它在工作,因为我在启动AUGraph时可以听到音频,我的回调是按照设计将样本写入ExtAudioFile。
我想我误解了关于AUGraphs、Callbacks或两者的一些基本信息。
从RemoteIO输入(例如麦克风)到程序输入回调的连接完全在AUGraph外部,因此它不会显示在CAShow()
输出中。就AUGraph而言,入口点是混合器的渲染回调,出口点是RemoteIO输出。AUGraph不知道程序是如何布局的,也不知道在将样本提供给渲染回调中的混合器之前会发生什么。
在ASCII中(假设您使用的是环形缓冲区):
Outside AUGraph Inside AUGraph
+-------------------------------+-----------------------------------------+
| RemoteIO Input -> Ring Buffer | Ring Buffer -> Mixer -> RemoteIO Output |
+-------------------------------+-----------------------------------------+
"连接到回调的远程IO输入元素的输出总线"-你能解释一下你的意思吗?据我所知,这不是一件事,所以这似乎是你的问题所在。
在混音器输入回调中,您可以从remoteIO输入访问样本,并将其提供给混音器,但它们没有连接,至少就AUGraph而言是这样。
如果你发布一些代码,我会更新答案。