是否可以列出当前在应用程序中的所有 RemoteIO 音频单元?

Posted

技术标签:

【中文标题】是否可以列出当前在应用程序中的所有 RemoteIO 音频单元?【英文标题】:Is it possible to list all RemoteIO audio units currently in the application? 【发布时间】:2013-03-15 08:33:02 【问题描述】:

我想通过AudioUnitAddRenderNotify 将输出渲染回调添加到当前活动的RemoteIO 单元,该单元正在向扬声器输出音频。我无权访问实际的 RemoteIO 实例变量,但我想在应用程序中获取音频单元列表并以这种方式找到 RemoteIO 单元。这甚至可能吗?

【问题讨论】:

有趣的问题——你怎么没有访问实例变量的权限?它是在静态库中创建的还是什么? 也很想知道解决方案。在我的特殊情况下,它由 Unity3d 的底层 fmod 实现处理,我无权访问。 你想获取openAL的输出吗? @AranMulholland 那将是理想的,但我怀疑它是可能的:( 希望提出这个问题,因为这是一个非常烦人的问题。 【参考方案1】:

如果您可以访问AUGraph,那么这是可能的。根据AUGraph documentation 的说法,有几种方法可以帮助您。

AUGraphGetNodeCount - 获取图中的节点数 AUGraphGetIndNode - 获取索引节点 AUGraphNodeInfo - 获取节点信息

一旦你有了正确的节点,你就可以得到 remoteIO 单元并添加你的回调。访问AUGraph 实际上是真正的问题。

【讨论】:

不错的提示,谢谢!这可能会与任何人得到答案一样接近。 谢谢。如果您确实找到了访问 AUGraph 的方法,我很想听听您是如何做到的,这有点像“圣杯”,因为它允许访问 openAL 以保存输出或添加效果,这将是非常棒的。 【参考方案2】:

只有一个 RemoteIO。我从来没有尝试过获得指向它的指针,而不是“创建”它的人。你为什么不尝试这样的事情,它应该会给你一个指向 RemoteIO 的指针:

OSStatus status;
AudioComponentInstance audioUnit;

    // Describe audio component
AudioComponentDescription desc;
desc.componentType = kAudioUnitType_Output;
desc.componentSubType = kAudioUnitSubType_RemoteIO;
desc.componentFlags = 0;
desc.componentFlagsMask = 0;
desc.componentManufacturer = kAudioUnitManufacturer_Apple;

// Get component
AudioComponent outputComponent = AudioComponentFindNext(NULL, &desc);

// Get audio units
status = AudioComponentInstanceNew(outputComponent, &audioUnit);
checkStatus(status);

【讨论】:

感谢您的回答。我很确定按照您的建议进行操作将实例化 RemoteIO 音频单元的 new 实例。 嗯,是的,在创建后对其进行了测试。我希望再次这样做只会返回一个指向创建的拳头的指针。有趣的是结果代码返回 0 但 outInstance 没有指向任何东西。所以我想它不起作用。 我很确定在同一个应用程序中可以运行多个 AUGraph。 可以有多个AURemoteIO吗?

以上是关于是否可以列出当前在应用程序中的所有 RemoteIO 音频单元?的主要内容,如果未能解决你的问题,请参考以下文章

如何列出 c/c++ 应用程序中的所有环境变量

Remote I/O 音频单元是不是设置缓冲区中的通道数?

MFC怎么查找当前目录以及子目录下的*_DS.TXT文件?

是否可以列出模块中的所有功能? [复制]

如何列出当前目录下,以install开头的所有文件

在git中列出所有下游本地分支