六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 45|回复: 0

【引用】iPhone 应用开发:音频播放

[复制链接]

升级  24%

22

主题

22

主题

22

主题

秀才

Rank: 2

积分
86
 楼主| 发表于 2013-1-15 01:54:47 | 显示全部楼层 |阅读模式
<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);
  •    
  • }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表