通过音频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
1、用耳机听音乐时尝试在切换音频应用程序时不停耳机,会发现无法将音乐暂停或切换到其他应用程序的声音上。2、在耳机上播放音乐时,音乐应用程序会在播放时将音频数据流向专用音频输出设备,其他应用程序通常输出到计算机的内置扬声器或默认音频输出设备,切换到其他应用程序时,音乐仍在耳机中播放。耳机是一种可以戴在耳朵上的设备,用来听音乐、接听电话、观看视频、玩游戏等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)