【引用】iPhone 应用开发:音频播放
<span style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; font-size: 14px; line-height: 22px;">Phone OS 音频分类:<div style="line-height: 22px;"> (1)High level, easy to use
?System Sound API - short sounds
?AVAudioPlayer class - ObjC, simple API
(2)Lower level, takes more effort but much more control
?Audio Toolbox - recording and playback, streaming, full control
?Audio Units - processing audio
?OpenAL
Sound effects音响效果:
?Button Clicks
?Alert Sounds
?Short Sounds Accompanying User Actions
iPhone OS 主要提供以下了几种播放音频的方法:
?System Sound Services
?AVAudioPlayer 类
?Audio Queue Services
?OpenAL
1. System Sound Services
System Sound Services 是最底层也是最简单的声音播放服务,调用 AudioServicesPlaySystemSound 这个方法就可以播放一些简单的音频文件,使用此方法只适合播放一些很小的提示或者警告音,因为它有很多限制:
■ 声音长度要小于 5 秒(一说小于30秒)
■ In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的
■ 打包成 .caf, .aif, 或者 .wav 的文件
■ 不能控制播放的进度
■ 调用方法后立即播放声音
■ 没有循环播放和立体声控制
另外,它还可以调用系统的震动功能,方法也很简单。具体的代码可以参考官方的示例SysSound,但是官方的示例只有一些简单的用法,从文档中我们发现可以通过 AudioServicesAddSystemSoundCompletion 方法为音频播放添加 CallBack 函数,有了 CallBack 函数我们可以解决不少问题,比如可以克服 System Sound Services 本身不支持循环播放的问题。以下代码可以实现一个在程序中循环播放的背景音乐:<div style="line-height: 22px;"><div style="line-height: 22px;">
[*]static void completionCallback (SystemSoundID mySSID) {
[*] // 音频重放
[*] AudioServicesPlaySystemSound(mySSID);
[*]}
[*]- (void) playSound {
[*] // 获得 main bundle
[*] CFBundleRef mainBundle;
[*] SystemSoundID soundFileObject;
[*] mainBundle = CFBundleGetMainBundle ();
[*] // 获得声音文件的URL
[*] CFURLRef soundFileURLRef = CFBundleCopyResourceURL (
[*] mainBundle,
[*] CFSTR ("background"),
[*] CFSTR ("wav"),
[*] NULL
[*] );
[*] // 创建 system sound 对象
[*] AudioServicesCreateSystemSoundID (
[*] soundFileURLRef,
[*] &soundFileObject
[*] );
[*] // 播放结束回调
[*] AudioServicesAddSystemSoundCompletion (soundFileObject, NULL, NULL,
[*] completionCallback,
[*] (void*) self);
[*] // 播放音频
[*] AudioServicesPlaySystemSound(soundFileObject);
[*]
[*]}
页:
[1]