【问题标题】:how to set scope and element when using audio unit使用音频单元时如何设置范围和元素
【发布时间】:2013-05-21 16:17:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios objective-c core-audio audiounit


    【解决方案1】:

    这张来自Apple Docs的插图很清楚:

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

    0 表示“输出总线”。

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

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

    // put this in header file
    #define kOutputBus 0
    #define kInputBus 1
    

    【讨论】:

    • 这是一个很好的答案。感谢您提供图表!
    【解决方案2】:

    AudioUnitSetProperty 定义为

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

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

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

    看看AudioUnitSetProperty的文档 还有Audio Unit Properties Reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2015-03-09
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多