zoukankan      html  css  js  c++  java
  • 音频单元组件服务参考(Audio Unit Component Services Reference)

    目录

      了解Audio Unit体系结构

      文档结构预览

      结构单元介绍

    本文主要介绍AudioUnit的组成

    本文由自己理解而成,如有错误,请欢迎网友们指出校正。

    了解Audio Unit体系结构

    开始前我们通过一个audioUnit对象来认识AudioUnit,这是一个Effect类型此类型的AudioUnit单元,这个单元由许多小的Scope(范围)组成,scope种有 element(元素),elementt种有channel(声道)模块、stream format(流格式) 和一些properties(属性)组成。

     

    文档结构预览  

    以下来自Audio Unit Component Services Reference 文档的结构组成,我们将根据这个结构进行介绍  

       

    预览(overView)

    音频单元组件服务参考提供c借口来操作音频单元,一个音频单元是用于处理音频的插件或者产生音频数据。使用共同的操作你可以打开关闭音频单元,详细描述在Audio Unit Component Services Reference中。

    任务函数(function by tasks)

    主要有三部分:初始化或者渲染音频、使用音频属性、使用音频参数。

    初始化或者渲染音频:

      //初始化一个音频单元,一旦创建成功,音频的输入输出流格式都是有效的并且出去准备渲染的状态,在这个阶段系统为音频单元创建最大帧的内存。

    OSStatus AudioUnitInitialize (
       AudioUnit inUnit //你要初始化的音频
    );
    

     //在你改变音频单元的特性之前,例如改变输入输出流的格式或者采样率,你必须先取消其初始化。调用这个方法来释放音频对象资源。调用这个方法后你可以重新配置音频参数并且重新初始化

    OSStatus AudioUnitUninitialize (
       AudioUnit  inUnit //你要取消初始化的对象
    );

    //注册一个回调方法来接收音频的渲染通知。注册的事件在音频执行渲染操作(每一个预渲染比特标记被设置)和音频的渲染操作完成(每一个渲染后的比特标记被设置)时都会被调用。inProc 和inProcUserData 是被认为是识别认证的两个参数。要移除渲染监听,你必须传这两个值得给AudioUnitRemoveRenderNotify。
    OSStatus AudioUnitAddRenderNotify (
       AudioUnit        inUnit,       //你想要接收的哪个通知的渲染对象
       AURenderCallback inProc,     //你注册的回调事件
       void             *inProcUserData //你想要传给你的调用事件的自定义数据。例如识别渲染通知。
    );
     //取消之前注册的渲染调用。
    OSStatus AudioUnitRemoveRenderNotify (
       AudioUnit        inUnit,
       AURenderCallback inProc,
       void             *inProcUserData
    );

    //为一个音频单元初始化一个渲染循环。
    OSStatus AudioUnitRender (
       AudioUnit                   inUnit,      //你想要访问的渲染对象
       AudioUnitRenderActionFlags  *ioActionFlags,  //配置渲染操作的对象
       const AudioTimeStamp        *inTimeStamp,      //音频渲染操作的时间戳。每个时间戳必须包含有效的单调递增的采样时间。下一个时间戳 inTimeStamp =inTimeStamp + inNumberFrames 如果采样时间不持续增加那么他们将会呈现间断现象。
      UInt32 inOutputBusNumber, //要渲染的输出缓冲区间 UInt32 inNumberFrames, //要渲染的音频帧数 AudioBufferList *ioData );
     //重置音频的渲染状态。
    OSStatus AudioUnitReset (
       AudioUnit         inUnit,
       AudioUnitScope    inScope, //scope范围一般是kAudioUnitScope_Global
       AudioUnitElement  inElement //element 范围一般是0
    );

    使用音频属性

    
    

    //Registers a callback to receive audio unit property change notifications.

    
    
    OSStatus AudioUnitAddPropertyListener (
       AudioUnit                     inUnit,
       AudioUnitPropertyID           inID,
       AudioUnitPropertyListenerProc inProc,
       void                          *inProcUserData
    );


    //Unregisters a previously-registered property listener callback function.

    OSStatus AudioUnitRemovePropertyListenerWithUserData (
       AudioUnit                     inUnit,
       AudioUnitPropertyID           inID,
       AudioUnitPropertyListenerProc inProc,
       void                          *inProcUserData
    );

    //Gets the value of an audio unit property.

    OSStatus AudioUnitGetProperty (
       AudioUnit            inUnit,
       AudioUnitPropertyID  inID,
       AudioUnitScope       inScope,
       AudioUnitElement     inElement,
       void                 *outData,
       UInt32               *ioDataSize
    );

    //Gets information about an audio unit property.

    OSStatus AudioUnitGetPropertyInfo (
       AudioUnit            inUnit,
       AudioUnitPropertyID  inID,
       AudioUnitScope       inScope,
       AudioUnitElement     inElement,
       UInt32               *outDataSize,
       Boolean              *outWritable
    );
    
     

    //Sets the value of an audio unit property.

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

    使用音频参数

    
    

    //Gets the value of an audio unit parameter.

    
    
    OSStatus AudioUnitGetParameter (
       AudioUnit               inUnit,
       AudioUnitParameterID    inID,
       AudioUnitScope          inScope,
       AudioUnitElement        inElement,
       AudioUnitParameterValue *outValue
    );

    //Sets the value of an audio unit parameter.

    OSStatus AudioUnitSetParameter (
       AudioUnit               inUnit,
       AudioUnitParameterID    inID,
       AudioUnitScope          inScope,
       AudioUnitElement        inElement,
       AudioUnitParameterValue inValue,
       UInt32                  inBufferOffsetInFrames
    );

    //Schedules changes to the value of an audio unit parameter.

    OSStatus AudioUnitScheduleParameters (
       AudioUnit                      inUnit,
       const AudioUnitParameterEvent  *inParameterEvent,
       UInt32                         inNumParamEvents
    );

    功能函数

     

    任务回调

    回调

    数据类型

     

    
    
    AudioUnit
    typedef AudioComponentInstance AudioUnit; //AudioUnit 是 AudioComponentInstance 类型。
    //类型分为:
    enum {
       kAudioUnitType_Output            = 'auou',
       kAudioUnitType_MusicDevice       = 'aumu',
       kAudioUnitType_MusicEffect       = 'aumf',
       kAudioUnitType_FormatConverter   = 'aufc',
       kAudioUnitType_Effect            = 'aufx',
       kAudioUnitType_Mixer             = 'aumx',
       kAudioUnitType_Panner            = 'aupn',
       kAudioUnitType_OfflineEffect     = 'auol',
       kAudioUnitType_Generator         = 'augn',
    };

    此类型有四种:

    Converter Audio Unit Subtypes  //转换类型

    enum {
       kAudioUnitSubType_AUConverter        = 'conv',
       kAudioUnitSubType_NewTimePitch       = 'nutp',
       kAudioUnitSubType_TimePitch          = 'tmpt',
       kAudioUnitSubType_DeferredRenderer   = 'defr',
       kAudioUnitSubType_Splitter           = 'splt',
       kAudioUnitSubType_Merger             = 'merg',
       kAudioUnitSubType_Varispeed          = 'vari',
       kAudioUnitSubType_AUiPodTime         = 'iptm',
       kAudioUnitSubType_AUiPodTimeOther    = 'ipto'
    };

    Effect Audio Unit Subtypes //效果类型。

    Effect (digital signal processing) audio unit subtypes for audio units provided by Apple.

    enum {
       kAudioUnitSubType_PeakLimiter          = 'lmtr',
       kAudioUnitSubType_DynamicsProcessor    = 'dcmp',
       kAudioUnitSubType_Reverb2              = 'rvb2',
       kAudioUnitSubType_LowPassFilter        = 'lpas',
       kAudioUnitSubType_HighPassFilter       = 'hpas',
       kAudioUnitSubType_BandPassFilter       = 'bpas',
       kAudioUnitSubType_HighShelfFilter      = 'hshf',
       kAudioUnitSubType_LowShelfFilter       = 'lshf',
       kAudioUnitSubType_ParametricEQ         = 'pmeq',
       kAudioUnitSubType_Delay                = 'dely',
       kAudioUnitSubType_Distortion           = 'dist',
       kAudioUnitSubType_AUiPodEQ             = 'ipeq',
       kAudioUnitSubType_NBandEQ              = 'nbeq'
    };

    Mixer Audio Unit Subtypes  //混合类型

    Audio mixing audio unit subtypes for audio units provided by Apple.

    enum {
       kAudioUnitSubType_MultiChannelMixer      = 'mcmx',
       kAudioUnitSubType_MatrixMixer            = 'mxmx',
       kAudioUnitSubType_AU3DMixerEmbedded      = '3dem',
    };

    Input/Output Audio Unit Subtypes  //输入输出类型

    enum {
       kAudioUnitSubType_GenericOutput       = 'genr',
       kAudioUnitSubType_RemoteIO            = 'rioc',
       kAudioUnitSubType_VoiceProcessingIO   = 'vpio'
    };

    Music Instrument Audio Unit Subtypes

    Audio units that can be played as musical instruments via MIDI control.

    enum {
       kAudioUnitSubType_Sampler   = 'samp'
    };

    AudioUnitScope

    typedef UInt32 AudioUnitScope;// AudioUnitScope 类型为UInt32

    enum {
       kAudioUnitScope_Global = 0,
       kAudioUnitScope_Input  = 1,
       kAudioUnitScope_Output = 2,
       kAudioUnitScope_Group  = 3,
       kAudioUnitScope_Part   = 4,
       kAudioUnitScope_Note   = 5
    };


    AudioUnitElement

      

    typedef UInt32 AudioUnitElement;  //AudioUnitElement 类型为UInt32

    AudioUnitElement 根据Scope值来设定,在输入输出scope时,他根据硬件的数字信号缓冲区来确定。Global scope恒为0.



    Channels
    core Audio SDK 中用Buffer 来代替Channel


    多个buffers 可以用bufferlist



    stream format


    AudioUnitParameter

    struct AudioUnitParameter {
       AudioUnit             mAudioUnit;
       AudioUnitParameterID  mParameterID;
       AudioUnitScope        mScope;
       AudioUnitElement      mElement;
    };
    typedef struct AudioUnitParameter AudioUnitParameter; //结构类型

    有Setter和Getter方法。


    AudioUnitParameterID

    typedef UInt32 AudioUnitParameterID;

    AudioUnitParameterValue

    typedef Float32 AudioUnitParameterValue;


    AudioUnitProperty

     为一个 audio unit用一个key-value 值定义一个 attribute 或者 behavior .

    struct AudioUnitProperty {
       AudioUnit            mAudioUnit;
       AudioUnitPropertyID  mPropertyID;
       AudioUnitScope       mScope;
       AudioUnitElement     mElement;
    };
    typedef struct AudioUnitProperty AudioUnitProperty;
    有Setter和Getter方法。

    AudioUnitPropertyID

    typedef UInt32 AudioUnitPropertyID;



    AudioUnitParameterEvent

    A scheduled change to an audio unit parameter’s value.

    struct AudioUnitParameterEvent {
       AudioUnitScope scope;
       AudioUnitElement element;
       AudioUnitParameterID parameter;
       AUParameterEventType eventType;
       union {
          struct {
             SInt32                   startBufferOffset;
             UInt32                   durationInFrames;
             AudioUnitParameterValue  startValue;
             AudioUnitParameterValue  endValue;
          } ramp;
          struct {
             UInt32                   bufferOffset;
             AudioUnitParameterValue  value;
          } immediate;
       } eventValues;
    };
    typedef struct AudioUnitParameterEvent AudioUnitParameterEvent;


    Audio Unit Parameter Event Types

    Audio unit parameter event types.

    enum {
       kParameterEvent_Immediate = 1,
       kParameterEvent_Ramped    = 2
    };
    typedef UInt32 AUParameterEventType;



    Audio Unit Render Flags

     配置 audio unit rendering 标记

    enum {
       kAudioUnitRenderAction_PreRender            = (1 << 2),
       kAudioUnitRenderAction_PostRender           = (1 << 3),
       kAudioUnitRenderAction_OutputIsSilence      = (1 << 4),
       kAudioOfflineUnitRenderAction_Preflight     = (1 << 5),
       kAudioOfflineUnitRenderAction_Render        = (1 << 6),
       kAudioOfflineUnitRenderAction_Complete      = (1 << 7),
       kAudioUnitRenderAction_PostRenderError      = (1 << 8),
       kAudioUnitRenderAction_DoNotCheckRenderArgs = (1 << 9)
    };
    typedef UInt32 AudioUnitRenderActionFlags;


    General Audio Unit Function Selectors

    相应audio unit单元组成,产生 audio unit 组成方法。

    enum {
       kAudioUnitRange                                     = 0x0000,
       kAudioUnitInitializeSelect                          = 0x0001,
       kAudioUnitUninitializeSelect                        = 0x0002,
       kAudioUnitGetPropertyInfoSelect                     = 0x0003,
       kAudioUnitGetPropertySelect                         = 0x0004,
       kAudioUnitSetPropertySelect                         = 0x0005,
       kAudioUnitAddPropertyListenerSelect                 = 0x000A,
       kAudioUnitRemovePropertyListenerSelect              = 0x000B,
       kAudioUnitRemovePropertyListenerWithUserDataSelect  = 0x0012,
       kAudioUnitAddRenderNotifySelect                     = 0x000F,
       kAudioUnitRemoveRenderNotifySelect                  = 0x0010,
       kAudioUnitGetParameterSelect                        = 0x0006,
       kAudioUnitSetParameterSelect                        = 0x0007,
       kAudioUnitScheduleParametersSelect                  = 0x0011,
       kAudioUnitRenderSelect                              = 0x000E,
       kAudioUnitResetSelect                               = 0x0009,
       kAudioUnitComplexRenderSelect                       = 0x0013,
       kAudioUnitProcessSelect                             = 0x0014,
       kAudioUnitProcessMultipleSelect                     = 0x0015
    };
    

    常量

     

    Result Codes 结果码

     

     

  • 相关阅读:
    设计模式学习总结
    算法时间复杂度和空间复杂度表示
    SQLite简单使用
    接口,组合和继承的想法
    二叉树的学习
    Oracle 常用命令大汇总
    Oracle 最常用功能函数经典汇总
    oracle 常用command
    历史最牛演讲:Oracle总裁Yale演讲全文中英文对照
    深入abstract class和interface
  • 原文地址:https://www.cnblogs.com/try2do-neo/p/3278459.html
Copyright © 2011-2022 走看看