预备知识
对于音频我们需要一下储备知识,这篇文章主要介绍Audio的基础知识,我们需要知道音频的采样率、采样频率、采样位数、通道数、帧、音频周期、音频数据格式、iOS支持的文件格式和iOS对音频处理的一些框架等等。
1、采样率、比特率:
采样率:
8000 Hz - 电话所用采样率, 对于人的说话已经足够
11025 Hz-AM调幅广播所用采样率
22050 Hz和24,000 Hz- FM调频广播所用采样率
32000 Hz - miniDV 数码视频 camcorder、DAT (LP mode)所用采样率
44100 Hz - 音频 CD, 也常用于 MPEG-1 音频(VCD, SVCD, MP3)所用采样率
47250 Hz - 商用 PCM 录音机所用采样率
48000 Hz - miniDV、数字电视、DVD、DAT、电影和专业音频所用的数字声音所用采样率
50000 Hz - 商用数字录音机所用采样率
96000 或者 192,000 Hz - DVD-Audio、一些 LPCM DVD 音轨、BD-ROM(蓝光盘)音轨、和 HD-DVD (高清晰度 DVD)音轨所用所用采样率
2.8224 MHz - Direct Stream Digital 的 1 位 sigma-delta modulation 过程所用采样率。
比特率:每秒的传输速率(位速, 也叫比特率)这个概念不是音频仅有。如48.2kbps 或 48200bps, 其中的 b 是 bit, ps 是每秒的意思,表示每秒48200bit的容量.
2、采样频率
采样频率指的是每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。由于人耳的分辨率很有限,太高的频率并不能分辨出来。
日常生活照常用的采样率22050, CD音质的采样率是44100。
3、采样位数
采样位数:即采样值或取样值(就是将采样样本幅度量化)即记录的是声波的振幅。它是用来衡量声音波动变化的一个参数,它的数值越大,分辨率也就越高,即声音越细腻,所发出声音的能力越强。例如8位代表2的8次方—256,16位则代表2的16次方—64K。比较一下,一段相同的音乐信息,16位采样位数能把它分为64K个精度单位进行处理,而8位采样位数只能处理256个精度单位,造成了较大的信号损失,所以前者记录了音频更多的细节。下面列一些对比:
- 1 字节(8bit) 能记录 256 个数, 也就是只能将振幅划分成 256 个等级;
- 2 字节(16bit) 可以细到 65536 个数, 已到达 CD 标准;
- 4 字节(32bit) 能把振幅细分到 4294967296 个数;
4、通道数
通道数:即声音的通道的数目。通常分为单声道和立体声,单声道的声音只能使用一个喇叭发声,而立体声可以使两个喇叭都发声更能感受到空间效果,当然还有更多的通道数。
需要注意的是:如果是双声道, 那么采样就是双份的, 文件也差不多要大一倍.
5、帧、周期
帧:帧记录了一个声音单元,其长度为样本长度(采样位数)和通道数的乘积。
周期:音频设备一次处理所需要的帧数,对于音频设备的数据访问以及音频数据的存储,都是以此为单位。
6、交错模式和非交错模式
交错模式:数字音频信号存储的方式。数据以连续帧的方式存放,即首先记录帧1的左声道样本和右声道样本,再开始帧2的记录。
非交错模式:首先记录的是一个周期内所有帧的左声道样本,再记录所有右声道样本。
7、音频数据格式
7.1 音频压缩方式
音频压缩技术指的是对原始数字音频信号流(PCM编码)运用适当的数字信号处理技术,在不损失有用信息量,或所引入损失可忽略的条件下,降低(压缩)其码率,也称为压缩编码,它有两种压缩方式,分别是有损压缩(降低音频采样频率与比特率,输出的音频文件会比原文件小)和无损压缩(无损压缩能够在100%保存原文件的所有数据的前提下,将音频文件的体积压缩的更小,而将压缩后的音频文件还原后,能够实现与源文件相同的大小、相同的码率)。例如MP3、WMA、OGG被称为有损压缩,无损压缩格式有APE、FLAC、WavPack、LPAC、WMALossless、AppleLossless、La、OptimFROG、Shorten。而常见的、主流的无损压缩格式只有APE、FLAC。
7.2 iOS支持的文件格式
Format Name | Format fileName extensions |
---|---|
AIFF | .aif, .aiff |
CAF | .caf |
MPEG-1,layer 3 | .mp3 |
MPEG-2, MPEG-4 ADTS | .acc |
MPEG-4 | .m4a,.mp4 |
WAV | .wav |
AC-3(Dolby Digital) | .ac3 |
Enhanced AC-3 (Dolby Digital plus) | .ec3 |
7.3 音频数据格式转换
在iOS中可以使用Audio Convert Services提供的服务来完成音频数据格式转换,可以完成下面三种类型转换。
- 将音频格式解码为线性PCM格式。(例如AAC(高级音频编码)转成PCM)
- 将线性PCM数据转换为其他音频格式。
- 在线性PCM的不同变体之间进行转换(例如,将16bit带符号整数线性PCM转换为8.24bit定点线性PCM)。
7.4 音频录制格式选择
在录制音频的时候不推荐使用AAC和MP3格式,它们耗电和消耗CPU性能。苹果推荐使用下面这个些格式。
录制音频推荐格式 |
---|
Apple Lossless (ALAC, 苹果无损格式) |
iLBC (internet Low Bitrate Codec,互联网低比特率编解码器) |
IMA/ADPCM ( IMA-4) |
Linear PCM |
µLaw and aLaw |
7.5 Core Audio中的音频数据的规范格式(使用下面这些规范可以是音频数据,与平台无关)
- 在iOS中的输入和输出是使用的16bit整数的线性PCM样本
- 在iOS中的audio units 和其他音频处理是使用8.24bit的无交错线性PCM的固定样本
- Mac input and output Linear PCM with 32-bit floating point samples
- Mac audio units and other audio processing Noninterleaved linear PCM with 32-bit floating point samples
7.6 音频数据的数据包
音频数据格式有三种数据包:
- 在CBR(恒定比特率)格式(例如线性PCM和IMA / ADPCM)中,所有数据包的大小均相同。
- 在VBR(可变比特率)格式(例如AAC,Apple Lossless和MP3)中,所有数据包的帧数均相同,但每个采样值中的位数可能会有所不同。
- 在VFR(可变帧速率)格式中,数据包具有变化的帧数。
8 Core Audio 介绍
Core Audio是苹果对音频处理的框架,分为三层接口,底层我们不能够直接使用,所以接下来主要介绍,中层和高层的接口。如下图所示。
音频处理的三层接口结构
8.1 mid-level
- Audio Converter Services:提供数据格式转换服务。
- Audio File Services:从磁盘读、写音频数据服务。
- Audio Unit Services 和 Audio Processing Graph Services为app提供数字信号处理(DSP)插件,例如均衡器和混频器。
- Audio Format Services:提供音频数据格式管理服务。
8.2 high-level:
- Audio Queue Services:可以记录,播放,暂停,循环和同步音频。它根据需要采用编解码器来处理压缩的音频格式。音频数据流对开发者可见,也就是用户可以对这个数据流操作。
- AVAudioPlayer:用于播放和循环音频以及实现快退和快进。音频数据流对开发者不可见,也就是只能通过调用API,不能够处理数据,需要注意的是在音频播放行为,如果需求是需要立体声并且精确同步,不要使用这个播放器,Audio Queue Services更为适合,反之苹果推荐使用这个播放器。
- Extended Audio File Services:它是对Audio File Services 和 Audio Converter services的封装,它为读写未压缩和压缩的声音文件提供了统一的接口,例如提供与线性PCM之间的自动数据转换。
- OpenAL:它直接使用Core Audio的I/O音频单元,从而实现最低延迟回放。适用的主要场景是游戏声音。
8.3 对于iOS需要知道的音频处理框架
- AudioToolbox.framework:为mid-level和high-level提供接口,在iOS,包含了Audio Session Services
- AudioUnit.framework:让app可以使用音频插件,比如音频单元和编解码器。
- AVFoundation.framework:主要提供两个类AVAudioPlayer和AVAudioEngine,前者主要处理简单的音频播放,后者是处理更为复杂的音频播放。
- CoreAudio.framework:提供跨Core Audio使用的数据类型以及用于低级服务的接口。
- OpenAL.framework:操作OpenAL的框架。
Audio units进一步介绍
Audio Unit 是所有 iOS 以及 OS X上音频框架的最底层,无论使用的是 AVAudioRecorder、AVAudioPlayer、或者 Audio Queue Service、OpenAL 等,最终底层实现都是通过 Audio Unit 来完成的。
在 iOS 上可用的 Audio unit 是有限的,OS X上面可以自定义一个 Audio unit 但是 iOS 上不行,只能使用系统提供的 Audio unit。
但是什么时候使用 Audio Unit ?官方的说法是,当你需要高度可控的、高性能、高灵活性或者需要某种特别的功能(比如回音消除,只在 Audio unit 提供支持,所有高层 API 均不支持回音消除)的时候,才需要使用 Audio unit。
Audio units: 它封装在在头文件AUComponent.h中。iOS Audio units 使用8.24位定点线性PCM音频数据进行输入和输出。iOS提供有4类Audio units 如下面所列, 而在OS X中大概有40多个Audio units 。
- 3D混合器(3D mixer unit):允许任意数量的单声道输入,每个输入可以是8位或16位线性PCM,并且在8.24位定点PCM中提供一个立体声输出,3D混合器在其输入上执行采样率转换,并对每个输入通道提供大量控制,比如控制音量,静音,距离衰减和播放速率。可以使用kAudioUnitSubType_AU3DMixerEmbedded来设置。
- 多通道混音器(Multichannel mixer unit):允许任意数量的单声道或立体声输入,每个输入可以是16位线性或8.24位定点PCM,并且在8.24位定点PCM中提供一个立体声输出。应用程序可以控制每个输入通道静音和取消静音,和调控音量大小。可以使用kAudioUnitSubType_MultiChannelMixer来设置。
- 转换器(Converter unit):提供采样率,位深度和位格式(线性到定点)转换。iPhone转换器的标准数据格式为8.24位定点PCM。可以使用kAudioUnitSubType_AUConverter来设置。
- I/O unit:提供实时音频输入和输出,并根据需要执行采样率转换。可以使用kAudioUnitSubType_RemoteIO来设置。
注:关于Core Audio的实战更新中......
网友评论