常量

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

目录了解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_GlobalAudioUnitElement 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 SubtypesAudio units that can be played as musical instruments via MIDI control.

enum {

kAudioUnitSubType_Sampler = 'samp'

};

AudioUnitScopetypedef 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

AudioUnitParameterstruct AudioUnitParameter {

AudioUnit mAudioUnit;

AudioUnitParameterID mParameterID;

AudioUnitScope mScope;

AudioUnitElement mElement;

};

typedef struct AudioUnitParameter AudioUnitParameter; //结构类型

有Setter和Getter方法。

AudioUnitParameterIDtypedef UInt32 AudioUnitParameterID;

AudioUnitParameterValuetypedef 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方法。

AudioUnitPropertyIDtypedef UInt32 AudioUnitPropertyID;

AudioUnitParameterEventA 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 TypesAudio 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 结果码

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航