Iphone开发之音频101 (part 1): 文件和数据类型

来源:互联网 发布:旅游规划行业知乎 编辑:程序博客网 时间:2024/05/22 02:21

Iphone开发之音频101 (part 1): 文件和数据类型

Iphone开发之音频101 (part 1): 文件和数据类型

 


 

  免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!

 

  原文链接地址:http://www.raywenderlich.com/204/audio-101-for-iphone-developers-file-and-data-formats

 

  在使用iphone工作之前,我(ray)对声音格式了解的相当少。我只知道在“wav”和“mp3”之前的不同,但是无论如何我不能准确的告诉你“AAC”、“CAF”是什么类型,也不能告诉在MAC上最好的转换音频文件的方法。

  我已经学习了一些音频的知识,假如你想要在iphone上面开发,对文件和数据格式,转换,录音和使用什么API应该有个基本的了解。

  这篇文章是三篇涵盖音频开发教程中的第一篇。在这片文章中,我们将会从文件和数据格式开始。

 

文件格式和数据格式

   第一我们要知道的是,对每个音频文件有两部分:1是文件格式(或者是音频容器),2是数据格式(或者是音频编码)。

  文件格式(或者是音频容器)描述了这个文件它自己的格式。这实际的在里面的音频数据能被很多不同的方式编码。例如,一个caf文件是一个文件格式,它能够包含用MP3、线性pcm(lpcm)或其他许多格式编码的音频数据。

 接下来让我们更深入些。

 

数据格式(或者是音频编码)

  我们实际上将要开始了解音频编码,而不是文件编码,因为这编码实际上是这部分最重要的。

  以下是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很好的支持。

 

我们选择什么?

  上面的看起来是张很大的表,但是实际上只有一些是我们编码首选的。要知道我们使用什么,你必须记住一下的:

  • 你可以播放linear PCM, IMA4和一些其它没有压缩或者简单压缩和同时没有问题的格式,这些格式可以很好的被iphone的硬件解码。
  • 对于更多先进的压缩格式,例如AAC,MP3,和ALAC,iphone没有硬件的支持来很快解压这数据,并且在一个时候只能处理一个文件。因此,假如你播放超过一个的那种编码方式的音频,他们将会使用软件来解码,所以很慢,还会占用CPU。

      

  因此选择什么样的数据格式,这里有两条建议:

  • 假如空间不是问题,使用linear PCM来编码每个音频。这样不仅使你的音频最快的播放,而且你能同时不占用CPU资源的情况下播放多个声音。
  • 假如空间是问题,你大多数将会使用AAC来编码你的背景音乐和使用IMA4来编码你的音效。

      

Linear PCM的许多不同

  有一个很重要的关于linear PCM的,就是再一次声明这种无压缩的数据格式针对iphone是首选的。针对不同的数据存储,这里有一些不同的linear PCM。这些数据能被使用高或低的字节顺序格式来储存,就像浮点型或者整型,或者是各种各样的位宽。

  这很重要的一件事需要知道的是,在iphone上面首选的linear PCM是低字节顺序的16位整型,或者是"LEI16"(好像是一种编码格式,apple caf audio format code: LEI16, ios设备的音频格式是16位低字节编码)。这个是和Mac os x不一样的,它使用的是本地32位浮点型字节顺序。因为音频文件经常在Mac上面创建,所以检查文件和转换他们到iphone首选的格式是很好的主意。

 

文件格式(或者说是音频容器

  iphone支持很多文件格式,包括MPEG-1 (.mp3), MPEG-2 ADTS (.aac), AIFF, CAF, and WAVE。但是最重要的事是你可以仅仅使用CAF,因为它能包含任何iphone支持的编码格式的数据,在iPhone上面它是推荐的文件格式。

  在这里我在啰嗦点,其实文件格式就像是桶一样,里面可以装很多水,那些水就是那些音频数据。桶有很多种,也就是有很多种文件格式,而且不一样的桶,也需要装不同的水。CAF这种桶就可以装各种各样的水,不过有些就只能装几种类型的水。希望我这样的比喻你可以很好的理解。

 

比特率

  这有一个有关音频编码很重要的术语,我们接下来会提及:比特率。

  比特率是音频文件每秒占据的字节数(比特数)。一些像AAC或者MP3编码会指定音频文件压缩的比特数。当你使这比特率比较低时,你将会丢失质量。

  你应该依靠你的特别的声音文件来选择不同的比特率,试着使用不同的比特率,来看看那个是最合适的,在文件大小和质量。假如你的文件大多数是语音,你可以使用比较低的比特率。

  这里有一个表,给你一个最常见的比特率的概述:

  •  32kbit/s: 调幅广播的质量
  •  48kbit/s: 一般比较长时间的语音播客的比特率
  •  64kbit/s: 一般正常长度的语音播客的比特率
  •  96kbit/s: 调频广播的质量
  •  128kbit/s: 大多数MP3音乐的比特率
  •  160kbit/s: 那些很喜欢音乐的,想要听觉感受的人更喜欢的在128kbit/s之上的一个比特率
  •  192kbit/s: 数字电台的质量
  •  320kbit/s: 在这个比特率下人们几乎和CD的播放效果一样,不能区别
  •  500kbit/s-1,411kbit/s: 无损的音频编码,就像linear PCM

 

采样率

  在我们继续介绍音频之前,这里还有一个术语我们需要了解一下,就是:采样率。

  当转换一个模拟信号到数字格式,采样率表示多久抽取一次声音波形试样来转换成一个数字信号。

  大多情况下,44100Hz是被经常使用的,因为这和CD音频一样的采样率。