音頻單元組件服務參考(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 結果碼

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM