1

我正在开发一个卡拉OK软件,打算使用audiounit来混合音频,但我不知道如何设置范围和元素?例如:

UInt32 busCount = 2;
OSStatus result = AudioUnitSetProperty (
    mixerUnit,
    kAudioUnitProperty_ElementCount
    kAudioUnitScope_Input,
    0,
    &busCount,
    sizeof (busCount
);

为什么范围是'kAudioUnitScope_Input'而元素是'0',这是什么意思?

4

2 回答 2

6

Apple Docs的这张插图非常清楚:

范围是音频单元内的编程上下文。尽管全局作用域的名称可能另有说明,但这些上下文永远不会嵌套。您可以使用 Audio Unit Scopes 枚举中的常量来指定目标范围。

0 表示“输出总线”。

元素是嵌套在音频单元范围内的编程上下文。当一个元素是输入或输出范围的一部分时,它类似于物理音频设备中的信号总线,因此有时称为总线。这两个术语——元素和总线——在音频单元编程中指的是完全相同的东西。本文档在强调信号流时使用“总线”,在强调音频单元的特定功能方面时使用“元素”,例如 I/O 单元的输入和输出元素(参见“I/O 单元的基本特征”) .

最好使用定义来赋予总线值语义:

// put this in header file
#define kOutputBus 0
#define kInputBus 1
于 2013-05-21T16:26:01.893 回答
1

AudioUnitSetProperty定义为

OSStatus AudioUnitSetProperty (
   AudioUnit            inUnit,
   AudioUnitPropertyID  inID,
   AudioUnitScope       inScope,
   AudioUnitElement     inElement,
   const void           *inData,
   UInt32               inDataSize
);

您的代码中的 0 对应于AudioUnitElementkAudioUnitScope_Input 定义的 0,AudioUnitScope解释为

范围 - 音频单元内的程序上下文,该属性适用。如本文档中所述,属性适用于一个或多个范围。iOS 中的音频单元范围是 Input、Output 和 Global。在 OS X 中,音频单元具有额外的 MIDI 相关范围:组、声部和音符。

查看AudioUnitSetProperty的文档 以及Audio Unit Properties Reference

于 2013-05-21T16:27:51.667 回答