文档章节

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

大侠自来也
 大侠自来也
发布于 2016/02/18 17:09
字数 2159
阅读 11
收藏 0

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音频一样的采样率。

 

接下来我们将会讨论转换音频文件和在Mac上面的记录音频文件。

© 著作权归作者所有

大侠自来也
粉丝 0
博文 4
码字总数 5166
作品 0
程序员
私信 提问
iphone系统架构以及各层提供的主要服务

iPhone OS的技术实现包括四层:核心OS(Core OS)层、核心服务(Core Service)层、媒体(Media)层和Cocoa Touch层。系统低层为所有应用提供基础服务,其他较高层包含较多的复杂服务和技术。...

Orange1
2012/10/11
0
0
iOS 开发中音频队列播放音频

2012-07-17 19:59:24| 分类: ios|字号 订阅 第一部分 用 到了AudioToolbox这个音频接口,总结下,希望对需要的朋友有帮助。AudioToolbox这个库是C的接口,偏向于底层,用于在线流媒体音 乐的...

andyhe91
2013/06/15
0
1
直播服务器简单实现 http_flv和hls 内网直播桌面

直播都不陌生了,如今主流的协议分析的对比图,个人见解。 协议 httpflv rtmp hls dash 传输层 http流 tcp流 http http 视频格式 flv flv tag Ts文件 Mp4 3gp webm 延时 低 低 高 高 数据分段...

mathlmx
2017/01/12
0
0
iPhone开发手机取证工具介绍

(一)目前主要的手机取证设备 1 WOLF wolf是种直观快速牢固的iPhone手机取证工具.运行干MacOS×系统之下.可有效获取各版本革果iPhone开发手机中的数据.是目前支持iPhone版本最全的取证工具...

wujiachen
2012/12/08
0
0
AVFoundation开发秘籍笔记-02播放和录制音频

一、音频会话 AVAudioSession 音频会话在应用程序和操作系统之间扮演着中间人的角色,提供一种简单实用的方法是OS得知应用程序应该如何与iOS音频环境进行交互。 有框架引入。每个iOS应用程序...

竹与豆
2018/05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

GitLab Auto DevOps功能与Kubernetes集成教程

介 绍 在这篇文章中,我们将介绍如何将GitLab的Auto DevOps功能与Rancher管理的Kubernetes集群连接起来,利用Rancher v2.2.0中引入的授权集群端点的功能。通过本文,你将能全面了解GitLab如何...

RancherLabs
2分钟前
0
0
基本类型 引用类型的问题

用concat()拷贝了个数组 ,原数组包含了引用类型, tempAee === this.dynacArr[0][this.dynacArr[1]][0] //false 虽然拷贝了个数组 , tempAee[0] === this.dynacArr[0][this.dynacArr[1]][......

东东笔记
4分钟前
0
0
Linux下Java运行.class文件,报错找不到或无法加载主类

Linux下Java运行.class文件,报错找不到或无法加载主类 classpath配置的错误,所以找不到.class文件。 原先的etc/profile中的classpath配置 export CLASSPATH=$JAVA_HOME/lib/tools.jar 更改...

Mr_Tea伯奕
15分钟前
0
0
vue 日期计算

搞开发少不了对时间进行加减操作,尤其是前端对日期操作不能单纯的加减,不然31+1 变成32号就扯了。比如推算前几分钟、后几分钟,,前几天、后几天,前几月、后几月等等相关操作。 百度找半天...

朝如青丝暮成雪
26分钟前
0
0
非递归实现后序遍历二叉树

问题描述 从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立)并对其进行后序遍历,然后将遍历结果打印输出。要求采用非递归方法实现。 解题思路 Push根结点到第一...

niithub
39分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部