如何使用音频组件服务发现[非Apple]音频单元?

时间:2014-06-05 19:27:18

标签: macos core-audio audiounit

在OS X中,我试图找到一个示例,说明如何发现最终用户系统上安装的所有音频单元,并获取该信息以供显示和使用。

我知道Audio Component参与了这项任务,但我完全不知道如何去做。我遇到的所有例子都是基于找到一个已知的'带有AudioComponentFindNext的Apple AU,我找不到发现其他任何内容的示例。

有人能指点我一个例子吗?

由于

2 个答案:

答案 0 :(得分:0)

您可以使用AudioComponentDescription设置0结构作为类型,子类型和制造商的通配符。将其传递给AudioComponentFindNext

AudioComponentDescription acd = { 0 };
AudioComponent comp = nullptr;
while((comp = AudioComponentFindNext(comp, &acd)) {
  // Found an AU
}

以下是标题中的一些相关文档:

@function       AudioComponentFindNext
@abstract       Finds an audio component.
@discussion     This function is used to find an audio component that is the closest match
                to the provided values.
@param          inComponent
                    If NULL, then the search starts from the beginning until an audio
                    component is found that matches the description provided by inDesc.
                    If non-NULL, then the search starts (continues) from the previously
                    found audio component specified by inComponent, and will return the next
                    found audio component.
@param          inDesc
                    The type, subtype and manufacturer fields are used to specify the audio
                    component to search for. A value of 0 (zero) for any of these fields is
                    a wildcard, so the first match found is returned.
@result         An audio component that matches the search parameters, or NULL if none found.

答案 1 :(得分:0)

只需使用提供的 AVAudioUnitComponentManager 组件函数即可获取音频单元。

它将返回与您传递的 AudioComponentDescription 匹配的音频单元数组。 命令单击 AudioComponentDescriptionkAudioUnitType_MusicDevice 以查看您可以使用的各种值。

// Exemple to get instruments audio units
var match = AudioComponentDescription()
match.componentType = kAudioUnitType_MusicDevice
        
let audioUnitComponents = AVAudioUnitComponentManager.shared().components(matching: match)