iOS 开发 中级:Audio之利用AVAudioPlayer实现SystemSoundService的功能

在以前的博文中,我们已经讲解了AVAudioPlayer和SystemSoundService的用法。这两种功能在一定程度上都适合作为游戏音效的播放方式。而两者也各有其优缺点。下面我们来总结一下有哪些:
iPhone OS 主要提供以下了几种播放音频的方法:

System Sound Services
AVAudioPlayer 类
Audio Queue Services
OpenAL

关于System Sound Services

System Sound Services 是最底层也是最简单的声音播放服务,调用 AudioServicesPlaySystemSound 这个方法就可以播放一些简单的音频文件,使用此方法只适合播放一些很小的提示或者警告音,因为它有很多限制:

      ■ 声音长度要小于 30 秒

      ■ In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的

      ■ 打包成 .caf, .aif, 或者 .wav 的文件

      ■ 不能控制播放的进度

      ■ 调用方法后立即播放声音

      ■ 没有循环播放和立体声控制

1)AVAudioPlayer的优点
(1)可以播放任意长度音乐;
(2)可以循环播放;
(3)可以控制播放的时间;
(4)可以控制声道的音量实现立体声效果;
(5)可以调整音量。
2)AVAudioPlayer的缺点
(1)播放之前必须先加载,不能立即播放;
(2)一次一个AudioPlayer只能播放所加载的音乐,不能同时播放好几次同样的音乐。
(3)没有振动效果
3)SystemSoundService的优点:
(1)能够立即播放
(2)能够在同一时间播放多次音乐
(3)可以加上振动效果
4)SystemSoundService的缺点:
(1)不能循环播放
(2)不能控制播放时间
(3)不能控制声道
(4)不能控制音量
(5)不能暂停音乐

我们发现,这两种音乐播放方式的优缺点几乎是完全互补的。那么,有什么用呢?
关键:我们这里考虑的是游戏音效的播放!都是短时间的音频播放!
想象一下游戏,有时候我们要重复的播放一个音效,有时候我们想来一个振动,有时候我们需要在短时间内播放同一个音频多次!
因此,我们可以考虑综合两者的功能!
办法:
利用AVAudioPlayer来实现SystemSoundService的效果!弥补AVAudioPlayer的缺点

我们先明确一下我们需要的功能:
(1)初始化后即可立即播放
(2)能在一个时间段内播放同一音频多次。这个再做个详细说明:我们使用AVAudioPlayer时,play后必须等其停止了才能重新播放。我们这里要改进的是即使前面的播放还没有结束,我们也可以启动新的播放,这个特别适用于播放敲击的声音,这样我们会感觉听到多个敲击的声音,而不是只有一个。记住这里不是讲和其他的AVAudioPlayer混音。
(3)能循环播放
(4)能暂停停止播放
(5)能播放震动和播放音频并震动
(6)能调节声道
(7)能调节音量

http://blog.csdn.net/songrotek/article/details/8988284

你可能感兴趣的:(iOS 开发 中级:Audio之利用AVAudioPlayer实现SystemSoundService的功能)