音频单元组件服务参考(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)_初始化

 

文档结构预览  

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

   

预览(overView)

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

任务函数(function by tasks)

音频单元组件服务参考(Audio Unit Component Services Reference)_时间戳_02

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

初始化或者渲染音频:

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



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
);



功能函数



音频单元组件服务参考(Audio Unit Component Services Reference)_时间戳_03



 



任务回调




音频单元组件服务参考(Audio Unit Component Services Reference)_初始化_04


回调


音频单元组件服务参考(Audio Unit Component Services Reference)_时间戳_05


数据类型


音频单元组件服务参考(Audio Unit Component Services Reference)_体系结构_06


 



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


音频单元组件服务参考(Audio Unit Component Services Reference)_初始化_07

多个buffers 可以用bufferlist

音频单元组件服务参考(Audio Unit Component Services Reference)_初始化_08

stream format

音频单元组件服务参考(Audio Unit Component Services Reference)_时间戳_09


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
};


常量

音频单元组件服务参考(Audio Unit Component Services Reference)_时间戳_10

 

Result Codes 结果码

音频单元组件服务参考(Audio Unit Component Services Reference)_体系结构_11

  

音频单元组件服务参考(Audio Unit Component Services Reference)_时间戳_12