iOS音频系列(四)--音频的文件格式和数据格式

iOS音频系列(四)--音频的文件格式和数据格式,第1张

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

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

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

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

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

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

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

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

MP3: ...

IMA4: ...未压缩

...

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

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

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

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

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

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

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

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

下面是常见的比特率:

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

任何吸引人的游戏都少不了声音。iOS开发者在游戏中需要使用声音时有多种选择,取决于对游戏中音频的控制需求,可以选择简单的内置服务,也可以选择更高级的API(比如OpenAL)。

通过音频API,可以实现流式音频,播放简短音效,甚至模拟3d空间的音频。有些游戏可以通过音轨让玩家沉浸在特定的心境中玩游戏,设置鼓励用户使用耳机来获得更完美的体验。

本系列文章中,会陆续整理近几年来在工作中涉及到的音频的相关旁慧知识,以算做对自己知识体系的一次梳理吧,大体包括Core Audio、OpenAL 以及Cocos2d引擎中的音效部分等三个方面。

• Core Audio 是什么?

• Core Audio 中提供的音频服务

• Core Audio 中的有关音频框架

• 有关 Core Audio 的变化及更新

Core Audio 是什么?

Core Audio 是iOS和 MAC 的关于数字音频处理的基础,它提供应用程序用来处理音频的一组软件框架,所有关于IOS音频开发的接口都是由Core Audio来提供或者经过它提供的接口来进行封装的,按照官方的说法是集播放、音频处理、录制运启答为一体的专业技术,通过它我们的程序可以同时录制,播放一个或者多个音频流,自动适应耳机,蓝牙耳机等硬件,响应各种电话中断,静音,震动等,甚至提供3D效果的音乐播放。

相关链接:

Core Audio Overview

Audio &Video Starting Point

Core Audio Glossary

Core Audio中提供的音频服务

Core Audio 本身是一个很庞大的话题,涉及到多个领域中的不同服务,为了更方便的使用Core Audio,通常可以将其分割为更小的模块。图一展示了根据应用程序服务层分解的示意图。构建在应用程序栈最下面的是底层硬件。接下来往上是驱动程序层。构建在驱动层之上的每一层都是苹果提供给开发人员的应用层服务,包括各类音频API和框架。

主要的几类服务:

Audio Unit

Audio Unit 是Core Audio 在应用层中最底层的服旁销务。在使用其他音频API时,最终在底层都会调用到Audio Unit。在所有的API中,Audio Unit 是延迟最短且最灵活的,但代价就是它的使用相当的复杂,幸运的是在实际使用中,我们很少直接使用Audio Unit。

相关链接:

Audio Unit Framework Reference

相关项目工程:

Core Audio Utility Classes

Audio File Service

通过Audio File Service 提供的API可以打开并读取或者写入磁盘上存储的文件。

Audio File Stream Service

它是对Audio File Service 的扩展补充。Audio File Service 对存储到磁盘上的音频文件进行 *** 作,而Audio File Stream Service

并不一定关联到某个文件上,它更适合基于网络的音频应用程序。

Audio Conversion Service

通过它可以将数据转换为PCM格式或者从PCM格式转换成数据。

Extended Audio File Service

可以将它理解为Audio File Service 和 Audio File Service 的组合。通过这种API 可以直接加在并转换音频文件。

Audio Session Service

和Core Audio中的其他API不同,它的主要用于 iOS 系统中协调应用程序之间的音频播放的 API 的。例如,当有电话打进来时,音频的播放就会被暂停;在用户启动电影时,音乐的播放就会停止。我们需要使用这些 API 来确保一个应用程序能够正确响应并处理这类事件。

System Sound Service

它是一种允许播放短音效和警告的基本服务,还具有提供振动功能的独特能力,Core Audio中的其他任何服务都不能访问振动系统。

Audio Queue Service

它可以对播放音频进行精细的控制,比如暂停、继续、循环播放和音频同步等,因此特别适合于播放和录制持续时间很长的音频。在游戏中进行语音叙述等情景时,需要音乐或者长时间的播放文件,便会需要它。

AVFoundation

它是Core Audio中唯一基于Objective-C的框架。这个框架提供了AVAudioPlayer类用于播放,AVAudioReconder类用于录音,以及AVAudioSession类用于设置音频回话。和其他高层API一样,我们需要在易用性和功能之间做出权衡。如果在此框架中找不到我们需要的特性或者功能,那么就必须深入底层服务并直接使用底层的API。

相关链接:

AV Foundation Framework Reference

AV Foundation Programming Guide

Audio Session Programming Guide

相关的项目工程:

AVCaptureAudioDataOutput To AudioUnit iOS

OpenAL

和其他专用API不同,OpenAL是一个狂平台的用于播放和捕捉音频的工业标准。OpenAL更适合播放空间音频(spatialized sound)或者定位音频(positional sound)。可以将空间音频理解成3D空间中的声音,通过OpanAL可以对音效添加一些效果,比如位置属性,这样会使远程的声音比近处的声音听起来要弱一些。

相关链接:

OpenAL FAQ for iPhone OS

相关的项目工程:

oalTouch

Core Audio中的有关音频框架

Core Audio 中的服务和框架并没有一对一的对应关系,应用层的服务实际上分为5个不同的框架:Core Audio、Audio Toolbox、Audio Unit、AVFoundtaion、OpenAL。图二中很好的展示了这些框架和服务之间的映射关系。

Audio Unit、AVFoundation和OpenAL的框架非常明了,和他们同名的服务直接对应,其中AVFoundtion有三个Objective-C类组成:AVAudioPlayer、AVAudioRecorder和AVAudioSession。

Audio Toolbox 框架提供了前面列出的其他剩下的应用层服务,包括非常重要的Audio Session Service。

相关链接:

Audio Toolbox Framework Reference

其他相关框架:

Media Player Framework

它是一个用于音频和视频播放的高层级接口,它包含了一个可以在应用中直接使用的默认的用户界面,可以使用它来播放用户在 iPod 库中的项目,或者播放本地文件以及网络流。另外,这个框架也包括了查找用户媒体库中内容的 API,同时还可以配置像是在锁屏界面或者控制中心里的音频控件。

相关链接:

Media Player Framework Reference

Core MIDI Framework

提供与MIDI设备通讯的标准方式,包括硬件键盘和合成器。可以使用这个框架来发送和接收MIDI消息以及与通过dock连接器或网络连接到iOS设备的MIDI外设交互。

相关链接:

Core MIDI Framework Reference

OS 4.0以后的功能变化如下:

iOS 7.1

Support for External Media Players (CarPlay相关的)

iOS 7.0

新增 Inter-App Audio和 AudioCopy

强化 Media Player / AV Foundation Framework

弃用 Audio Toolbox framework内的Audio Session API

iOS 6.0

新增 Audio UnitのComponent

强化 Media Player / Core Media / AV Foundation Framework

iOS 5.0

新增 Audio UnitのComponent

强化 Media Player / AV Foundation / AudioToolbox Frameworks

iOS 4.3

强化 AV Foundation

强化 Media Player / Audio Unit / Audio Toolbox Frameworks

iOS 4.2

新增 Core MIDI framework

强化 Media Player Framework

新增 AirPlay

iOS 4.1

强化 AV Foundation

iOS 4.0

新增 Core Media Framework

强化 AV Foundation

相关链接:What's New in iOS


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12271996.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存