http://www.cnblogs.com/try2do-neo/p/3278459.html

音频单元组件服务参考(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_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 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.Channelscore Audio SDK 中用Buffer 来代替Channel
多个buffers 可以用bufferliststream 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 结果码

音频单元组件服务参考(Audio Unit Component Services Reference)相关推荐

  1. iOS 音视频开发:Audio Unit播放FFmpeg解码的音频

    本文档描述了iOS播放经FFmpeg解码的音频数据的编程步骤,具体基于Audio Toolbox框架的Audio Session和Audio Unit框架提供的接口实现.在iOS 7及以上平台Audi ...

  2. Audio Unit: iOS中最底层最强大的音频控制API

    阅读的前提: Audio Session基础(Audio Session) Core Audio基本数据结构(Core Audio) 音视频基础知识 C/C++ 简单数据结构,函数使用 以下概念是文中 ...

  3. Audio Unit: iOS中最底层最强大音频控制API

    阅读前提: Audio Session基础(Audio Session) Core Audio基本数据结构(Core Audio) 音视频基础知识 C/C++ 简单数据结构,函数使用 以下概念是文中常 ...

  4. Audio Unit(三):Audio Unit Development Fundamentals

    当您开始创建音频单元时,Core audio的音频单元框架的强大功能和灵活性使您能够随时随地播放声音.然而,这种力量和灵活性也意味着,要想从正确的方向开始,还有很多东西需要学习.在本章中,您将鸟瞰这一 ...

  5. vue组件可视化_Vue HTML5音频可视化组件

    vue组件可视化 视听 (vue-audio-visual) VueJS audio visualization components. VueJS音频可视化组件. Vue HTML5 audio v ...

  6. 华为音频编辑服务(Audio Editor Kit),快速构建应用音频编辑能力

    音频编辑服务(Audio Editor Kit)是华为为开发者开放的各类场景音频处理能力的集合,汇聚了华为在音乐.语音等相关音频领域的先进技术.音频编辑服务提供基础编辑.伴奏提取.空间渲染.变声降噪等 ...

  7. Windows Server® 2008 Enterprise 组件服务 找不到 ”Microsoft Word 97 - 2003 文档“组件

    闲话少叙,直奔主题,维护一个项目,给客户添加了一个公文流转功能,主要使用金格office 中间件,本地环境运行一切ok,确认无误就给客户更新程序,在配置office组件服务时未找到 "Mic ...

  8. windows服务参考

    dll文件 aaclient.dll 何时何地都可以访问客户端 accessibilitycpl.dll 轻松访问控制面板 acledit.dll 访问控制列表编辑器 aclui.dll 安全描述符编 ...

  9. spring-boot ffmpeg 搭建一个音频转码服务

    2019独角兽企业重金招聘Python工程师标准>>> 利用FFMPEG实现一个音频转码服务 提供一个音频转码服务,主要是利用ffmpeg实现转码,利用java web对外提供htt ...

最新文章

  1. Flutter基础笔记
  2. dedecms 文章回收站 记得及时清理
  3. HarmonyOS之常用布局TableLayout的使用
  4. P1943-LocalMaxima_NOI导刊2009提高(1)【数论】
  5. 【期望】彩色圆环(金牌导航 期望-5)
  6. qsort与sort
  7. python中堆排序_Python实现堆排序的方法详解
  8. 使用Emit动态调用方法(技术原型)
  9. Linux登陆密码策略
  10. Mac连接路由器后没有反应_路由器安全技术——黑白名设置三步法
  11. 单词毕业设计,微信小程序毕设,小程序毕设源码,单词天天斗 (毕业设计/实战小程序学习/微信小程序完整项目)
  12. Docker容器运行
  13. 计算机技能高考素材,高中作文万能通用素材 2021高考必备作文素材
  14. BUAA(2021春)第一次上机选择+填空(含解析)
  15. 十、快速入门线性代数的向量和矩阵篇
  16. Cobertura计算覆盖率
  17. 1D Barcode图片组件,支持线性和邮政符号
  18. noip 模拟赛 Po姐姐与他的妹子A
  19. Android快速实现手机号码识别OCR
  20. 每天8小时自学java_MessageResources

热门文章

  1. maven 常用命令goal
  2. 产品数据管理对ERP系统的影响
  3. iOS开发拓展篇—音效的播放
  4. 如何在MAC OS中使用HAXM?
  5. 联通 位置服务器,中国联通服务器名称或地址
  6. 临床研究统计分析的要求和报告规范
  7. 赛酷软件测试自学,赛酷ocr怎么用 赛酷ocr使用方法
  8. 原来Oracle也不喜欢“蜀黍(r6笔记第54天)
  9. java中的类的继承_Java中类的继承
  10. 译码器设计——Verilog HDL语言