在面向iPhone开发游戏之前我对音频格式真的非常陌生。我只知道.WAVs和.MP3之间的区别,但是我却怎么都说不出.AAC或.CAF到底是什么,或者在Mac上转换音频文件的最佳方法是什么。

在音频开发中
.WAVs和.MP3有什么不同呢,或者还有的.AAC和.CAF之前又有什么区别呢,这些概念在这篇文章以后应该会有一定的理解.

最近在折腾Itunes音频处理(裁剪编辑,格式转换,波形绘制)

后来我发现如果想要在iPhone上开发游戏,我们就必须真正理解文件,数据格式,文件间的转换,录音以及API等基本元素。

文件格式和数据格式

如果要理解每一个音频文件,就需要了解它的两个部分的内容:文件格式和数据格式.文件格式又称为音频容器,数据格式又可以认为是编码格式.

文件格式(音频容器)描述的是存储在文件系统的文件的本身,而存储在文件中的音频数据是可以被编码成各种各样的格式的.比如,我们常见的CAF文件是一个文件格式(音频容器),它可以用来存储音频编码格式为MP3,LPCM或者其他的音频编码格式.

开始首先了解下音频的一些概念:
对每个音频文件有两部分:1是文件格式(或者是音频容器),2是数据格式(或者是音频编码)。
文件格式(或者是音频容器)描述了这个文件它自己的格式。这实际的在里面的音频数据能被很多不同的方式编码。例如,一个caf文件是一个文件格式,它能够包含用MP3、线性pcm(lpcm)或其他许多格式编码的音频数据。
数据格式(或者是音频编码)
  我们实际上将要开始了解音频编码,而不是文件编码,因为这编码实际上是这部分最重要的。

图片 1

音频数据格式(音频编码)

这里先来理解音频编码,在音频相关的内容中,音频编码是最重要的.

iPhone中支持的音频格式如下:

AAC:
被设计用来取代MP3音频编码的.它会压缩原来的声音,因此会减少存储空间.实际中ACC比MP3更好的压缩率.

AMR: AMR是一个编码格式用于压缩语音的音频编码格式.

linear PCM:
是标准的线性脉冲编码,一般是将模拟声音转化成数字信号,这是一个未压缩的音频格式.由于是未压缩的音频编码格式,因此播放时候用这种格式最是最好的选择,但是会占用过多的空间.

MP3: …

IMA4: …未压缩

以下是iphone支持的的数据格式和针对每个的描述:
AAC:aac其实是“advanced audio
coding”,它是被设计为MP3的后继者。你可能会猜测,它压缩了原先的声音,导致容量占用少但是质量也下降。但是这丢失的质量在你设置的比特率下很难被注意。事实上,aac比mp3有更好的压缩率,特别是在相同的比特率下。
HE-AAC:HE-AAC是AAC的一个扩展,这个“HE”其实“High
efficiency”。HE-AAC在低比特率下是最佳的音频就像流式音频一样。
AMR:AMR其实是“Adaptive
Multi-Rate”,他也是另一个在低比特率下的快速,有效的最佳编码方式。
ALAC:它其实就是“Apple
Lossless”,这种是一种没有任何质量损失的编码音频的方式,也就是我们说的无损压缩。
iLBC: 这是另一个高效,速度快,针对voip和流式音频很好且高效的编码。
IMA4:
这是一个在16-bit音频文件下按照4:1的压缩的压缩格式。这是一种针对iphone很重要的编码,我们将在以后讨论原因。
Linear
PCM:这基于线性脉冲编码调制,并介绍了用于模拟声音数据转换成数字格式的技术。简而言之,就是意味着无压缩数据。由于数据是非压缩的,它可以非常快的播放,并且当空间不是问题时,这种在iphone上面首选的音频编码方式。
μ-law and a-law:
就我所知道的,这种编码是交替的编码模拟数据到数字格式,但是比linear
PCM更快。
MP3:
这种格式是我们都知道也喜欢的,MP3任然是一个非常流行的格式,也被iphone很好的支持。

sweet_sound(from dryicons.com)

该选哪个数据音频格式

首先明确自己有哪些需求:

  • 如果用于播放的音频,选用LPCM,IMA4等其他的未压缩或者轻度压缩的音频格式.
  • 如果使用压缩率较高的AAC,MP3等这些iPhone直接硬件支持快速解码(解压缩).但是,硬件解码时候每次只支持一个文件.因此,如果需要同时播放多个需要解码(解压缩)的文件,就需要通过代码进行软件解码,非常慢.

所以如何选择数据音频格式,这里有些建议:

  • 如果空间足够,那么最好使用的音频编码格式使用LPCM.不仅播放最快,而且可以同时播放多个音乐而不太占用CPU的资源.
  • 如果对空间有要求,最好使用ACC音频编码来进行音乐的播放,IMA4音频编码进行系统声音的编码.

送葬CD者 AAC和MP3
对于这两个目前全世界用户最多的音频格式来说,它们有两个共同点:1.它们都不是无损压缩格式音频。2.它们联手终结了CD在音乐行业的老大地位。
  也许对于中国的用户来说,对于MP3格式更加熟悉,用户也基本都是从MP3格式开始使用直到现在为止,但是AAC确实是一个不能不提的音频格式,它因苹果发扬光大,并且在iPod的垄断之路上立下了汗马功劳,甚至可以说,AAC不仅仅目送CD走下历史舞台,传统消费级MP3产品也是被它赶下神坛的。至今在iTunes
Store的专辑音乐销售中,音乐的格式依然是AAC而不是MP3。
首先,MP3是一种国内用户最为耳熟能详的有损压缩格式,而隶属世界上的有损压缩格式其实数不胜数,而MP3成功的原因究竟是什么?首先是它的压缩比,传统的音频压缩文件只能达到8:1左右的压缩比。而MP3格式则是将这个压缩比提升到了10:1甚至12:1的高比例压缩,也因为MP3音频编码具有10:1~12:1的高压缩率,同时基本保持低音频部分不失真,但是牺牲了声音文件中12KHz到16KHz高音频这部分的质量来换取文件的尺寸,并且完全砍掉20KHz以上的部分,相同长度的音乐文件,用.mp3格式来储存,一般只有.wav文件的1/10,因而音质要次于CD格式或WAV格式的声音文件。但由于其文件尺寸小,音质好;所以在它问世之初还没有什么别的音频格式可以与之匹敌,因而为.mp3格式的发展提供了良好的条件。直到现在,这种格式还是很流行,作为主流音频格式的地位难以被撼动。但是树大招风,MP3音乐的版权问题也一直找不到办法解决,因为MP3没有版权保护技术,说白了也就是谁都可以用。
  AAC实际上是高级音频编码的缩写。AAC是由Fraunhofer
IIS-A、杜比和AT&T共同开发的一种音频格式,它是MPEG-2规范的一部分。AAC所采用的运算法则与MP3的运算法则有所不同,AAC通过结合其他的功能
来提高编码效率。AAC的音频算法在压缩能力上远远超过了以前的一些压缩算法(比如MP3等)。它还同时支持多达48个音轨、15个低频音轨、更多种采样率和比特率、多种语言的兼容能力、更高的解码效率。总之,AAC可以在比MP3文件缩小30%的前提下提供更好的音质。AAC也是目前最好的有损格式之一。有多种编码,faac,nero为常见,比特率最高为448kbps,并且在448kbps的比特率下已经几乎很难分辨和无损压缩的区别。

文件格式和数据格式

多种LPCM的变体

对于LPCM音频编码是iPhone中使用非压缩音频数据最好的数据格式.同时,根据具体的存储方式,又有多种变种.音频数据可以存储于大端或者小端模式,用float或者integer存储,也可以使用不同的bit-width存储.

而在iPhone中,使用的最平凡的是:little-endian integer 16bit(或者LEI16
short类型)的格式.在Mac中,使用native-endian(和电脑一致) float point
32bit.如果是在Mac上生成音频数据,那么最好生成合适的格式,再转化成iPhone使用的格式.

Linear PCM的不同格式
对于目前常见的PCM码率文件来说,最常见的三种文件格式也就是WAV、APE、FLAC了,而这三种格式之间又有怎么样的差别呢?
  WAV波形文件是音响设备和很多软件可以直接读取的波形文件,基本上不存在编解码问题。flac和ape都对WAV进行了编码,故能换取较小的体积,但同时造成解码播放时,因播放器材解析力很敏感(或者说技术所限),会因出现一定的jitter抖动(解析复杂编码所致)而导致播放效果不够饱满和流畅。这点你可以通过统一转换为WAV格式来试听解决。
  对于WAV格式来说,是目前的常规无损压缩格式中体积最大的文件格式,由于FLAC和APE都对WAV进行了更高技术的编码,所以换取了较小的体积,这也是这两种格式之所以出现的根本原因。而对于FLAC和APE两种格式来说,虽然体积大小差不多,但是采用了不同的压缩格式,所以对于设别来说在播放时候需要占用的资源多少也并不相同,简单地说占用资源多少的比例为:APE最大、FLAC中、WAV占用最小。最简单的例子就是如果你用一款配置并不算很高的随身播放设备,比如刷了rockbox的iPod
Classic或者一些目前主流的便携播放器,使用APE会有明显的卡顿以及续航的减少,而FLAC和WAV则没有什么明显的区别。
iphone支持很多文件格式,包括MPEG-1 (.mp3), MPEG-2 ADTS (.aac), AIFF,
CAF, and
WAVE。但是最重要的事是你可以仅仅使用CAF,因为它能包含任何iphone支持的编码格式的数据,在iPhone上面它是推荐的文件格式。

我们必须清楚每个音频文件都是由两部分内容所构成:它的文件格式(或者音频容器)以及它的数据格式(或者音频编码)。

文件格式(音频容器)

iPhone支持许多文件格式(音频容器)包括:MPEG-1(.mp3),MPEG-2
ADTS(.aac),AIFF,CAF,WAVE等.但是通常在iPhone中使用的容器格式就CAF,因为它可以用来封装iPhone所支持的所有音频格式.

接下来是一些编码的术语
比特率,采样率,采样位数 声道数 采样时间
比特率是音频文件每秒占据的字节数(比特数)。一些像AAC或者MP3编码会指定音频文件压缩的比特数,单位bps,比特率越高,传送的数据越大,音质越好。
  采样率是将声音模拟信号转换成数字信号的采样频率,也就是单位时间内采样多少点数据。(一个采样点有至少8bit)。大多情况下,44100Hz是被经常使用的,因为这和CD音频一样的采样率。即花费44100个数据点来描述一秒的声音波形。
补充:采样频率一般分为三个等级,22.05kHZ,44.1kHZ,48kHZ,分别对应FM广播的音质,CD音频的音质界限,DVD的音质。
采样位数:PCM编码一般采用 BitDepth_16,即16bit(2字节)
采样位数相对而言为画面的颜色数,标识每个取样的数据量,数据量越大则回放的声音越清晰和准确。
声道数:一般存在左右双声道
采样频率的倒数是采样周期或者叫作采样时间,它是采样之间的时间间隔.
CD每秒取样44100点,两个声道,每个取样是16bit编码的话,CD的比特率就是:44100216=1411200,即CD的每秒数据为176.4KB,而一张70分钟的CD容量为:723M.

文件格式(或音频容器)是用于形容文件本身的格式。我们可以通过多种不同的方法为真正的音频数据编码。例如CAF文件便是一种文件格式,它能够包含MP3格式,线性PCM以及其它数据格式的音频。

Bit Rates比特率

比特率是一个和音频数据格式关系密切的概念.

音频文件的比特率就是只单位时间内传送的bit数,单位是bit/s,kbit/s.更高的比特率会导致更大的文件.我们在使用有些音频数据格式例如AAC或者MP3时,需要我们去设置比特率,这个参数与音频格式在压缩过程的压缩率有关.当我们让比特率变低,那么音频质量就会更差.

注释: 1kbit/s = 1000bit/s,而不是1024bit/s

我们需要权衡比特率的大小和声音文件的质量,选择合适的比特率.如果我们使用的是语音声音,那么比特率可以适当低一点.

下面是常见的比特率:

  • 32kbit/s: AM 无限电广播的质量
  • 48kbit/s: 很长的语音对话
  • 64kbit/s: 正常长度的语音对话的比特率
  • 96kbit/s: FM广播
  • 128kbit/s: MP3音乐
  • 329kbit/s: CD的比特率
  • 500kbit/s~1411kbit/s: 无损音频编码格式,比如LPCM

数据格式(或音频编码)

采样率

最后一个专业术语:采样率.可以见前面的文章.

我们将从音频编码开始阐述(而不是文件格式),因为编码是最重要的环节。

以下是iPhone所支持的数据格式及其相关描述:

AAC:AAC是指“高级音频编码”,可以说它MP3格式的延续。你可能会想这种格式将压缩最初的声音而保存在磁盘中,所以会降低原先声音的质量。但是通常情况下我们很难注意到质量的降低,并且这主要是取决于我们所设置的比特率。实际上AAC的压缩做得比MP3好多了,特别是在比特率低于每秒128千比特的情况下。

HE-AAC:HE-AAC是AAC的超集,HE表示“高效率”。HE-AAC是对于低比特率音频(如流式音频)的优化。

AMR:AMR代表“自适应多速率”,是语音优化的另一种编码优化格式,能够突出极低比特率音频。

ALAC:同样也被称为“Apple
Lossless”,它是一种可以不破坏质量而压缩音频的编码。实际上它大概会压缩原始数据的40-60%。再加上算法是经过精心设计的,所以我们可以以较快的速度解压数据,这非常适合像iPod或iPhone等设备。

iLBC:这是另一种优化语音的编码,有益于IP语音和流媒体格式。

IMA4:这是一种压缩格式,将对16位体的音频文件进行4:1的压缩。这是面向iPhone设备的一种重要编码。

线性PCM:这是表示线性脉冲编码调制,主要是描写用于将模拟声音数据转换成数字格式的技术。简单地说也就是未压缩的数据。因为数据是未压缩的,所以我们便可以最快速地播放出音频,而如果空间不是问题的话这便是iPhone音频的优先代码选择。

μ-law和a-law:这是两种交替式编码,能够将模拟数据转换成数字格式,但是比起线性PCM拥有更强的语音优化效果。

MP3:这是我们最熟悉也是最喜欢的一种格式。这么多年以来MP3仍是最受欢迎的一种格式,而iPhone也支持这种格式。

所以我们该使用哪种格式?

在这一大串列表中我们必须选出几个优选编码格式。为了做出选择我们首先需要清楚:

我们可以无需压缩或简单压缩而同时播放线性PCM,IMA4等格式并且不会出现任何问题。

而对于更加高级的压缩方法如AAC,MP3以及ALAC,iPhone也拥有相关硬件能够帮助我们快速压缩这些数据——但是问题在于它一次只能处理一种文件。所以如果你一次希望播放2种以上的编码,你就不得不对其进行压缩,而这将耗费更多时间。

为了选择合适的数据格式,你需要遵循以下规则:

如果空间不是问题的话,我们便可以使用线性PCM对任何内容进行编码。这不仅是播放音频最快速的方法,并且你也可以同时播放多种声音且不会遭遇任何CPU资源问题。

如果空间是问题所在的话,你便可以使用AAC编码去播放背景音乐而使用IMA4编码去制造音效。

线性PCM的各种变体

关于线性PCM最需要注意的一点便是它应该算是iPhone首选的未压缩数据格式。基于数据的储存方式线性PCM具有多种变体。我们可以根据大端字节序或小端字节序,浮点数或整数以及不同位体去保存数据。

在此我们需要清楚的是在iPhone中线性PCM的优选变体是小端字节序整数16位体,或简称为LEI16。同时这也不同于Mac
OSX中的优选变体。因为我们总是在Mac上创造音频文件,所以我们最好能够仔细检查文件并将其转换成iPhone中的优选格式。

文件格式(或音频容器)

iPhone支持许多文件格式,包括MPEG-1(.mp3),MPEG-2
ADTS(.aac),AIFF,CAF以及WAVE。但是通常情况下我们都会选择CAF,因为它能够同时包含所有iPhone所支持的编码,并且它也是iPhone中的优先文件格式选择。

比特率

在此我们必须强调音频编码中一个非常重要的术语:比特率。

比特率是指一个音频文件所占有的每秒字节数。像AAC或MP3等编码便能够指定字节数而压缩音频文件。当你降低每秒钟的字节数时,你同时也在降低音频的质量。

你可以根据特定的音频文件选择比特率——尝试不同的比特率并判断哪一种最能够匹配文件规格和音频质量。如果你的文件主要与语音有关,你便可以选择较低的比特率。

以下是一些较常见的比特率:

相关文章