linwwwei 发表于 2013-1-15 01:54:47

【引用】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]
查看完整版本: 【引用】iPhone 应用开发:音频播放