iPhone 应用开发:音频播放

iPhone 应用开发:音频播放

在 iPhone 应用或者是游戏的开发过程中,对声音的支持是必不可少的。没有音效的软件是残缺的,用户体验也会大打折扣,下面是自己对iPhone音频的一点总结。
iPhone OS 音频分类:

  (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 是最底层也是最简单的声音播放服务,调用 AudioServicesPlaySystemS ound 这个方法就可以播放一些简单的音频文件,使用此方法只适合播放一些很小的提示或者警告音,因为它有很多限制:
  ■ 声音长度要小于 5 秒(一说小于30秒)
      ■ In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的
  ■ 打包成 .caf, .aif, 或者 .wav 的文件
  ■ 不能控制播放的进度
  ■ 调用方法后立即播放声音
  ■ 没有循环播放和立体声控制
  另外,它还可以调用系统的震动功能,方法也很简单。具体的代码可以参考官方的示例SysSound,但是官方的示例只有一些简单的用法,从文档中我们发现 可以通过 AudioServicesAddSystemSo undCompletion 方法为音频播放添加 CallBack 函数,有了 CallBack 函数我们可以解决不少问题,比如可以克服 System Sound Services 本身不支持循环播放的问题。以下代码可以实现一个在程序中循环播放的背景音乐:
   1.  static void completionCallback (SystemSoundID  mySSID) {
   2.         // 音频重放
   3.        AudioServicesPlaySystemSound(mySSID);
   4. }
   5. - (void) playSound {
   6.        // 获得 main bundle
   7.        CFBundleRef mainBundle;
   8.        SystemSoundID soundFileObject;
   9.        mainBundle = CFBundleGetMainBundle ();
  10.       // 获得声音文件的URL
  11.       CFURLRef soundFileURLRef  = CFBundleCopyResourceURL (
  12.                                                          mainBundle,
  13.                                                          CFSTR ("background"),
  14.                                                          CFSTR ("wav"),
  15.                                                          NULL
  16.                                                          );
  17.       // 创建 system sound 对象
  18.       AudioServicesCreateSystemSoundID (
  19.                                       soundFileURLRef,
  20.                                       &soundFileObject
  21.                                       );
  22.       // 播放结束回调
  23.       AudioServicesAddSystemSoundCompletion (soundFileObject, NULL, NULL,
  24.                                            completionCallback,
  25.                                            (void*) self);
  26.       // 播放音频
  27.       AudioServicesPlaySystemSound(soundFileObject);
  28.    
  29. }



2. AVAudioPlayer 类
      AVAudioPlayer 是 AVFoundation.framework 中定义的一个类,所以使用要先在工程中引入 AVFoundation.framework。我们可以把 AVAudioPlayer 看作是一个高级的播放器,它支持广泛的音频格式,主要是以下这些格式:
  ■ AAC
      ■ AMR(AdaptiveMulti-Rate, aformatforspeech)
      ■ ALAC( AppleLossless)
      ■ iLBC(internetLowBitrateCodec, anotherformatforspeech)
      ■ IMA4(IMA/ADPCM)
      ■ linearPCM(uncompressed)
      ■ µ-lawanda-law
      ■ MP3(MPEG-1audiolayer3
      AVAudioPlayer 可以播放任意长度的音频文件、支持循环播放、可以同步播放多个音频文件、控制播放进度以及从音频文件的任意一点开始播放等,更高级的功能可以参考 AVAudioPlayer 的文档。要使用 AVAudioPlayer 的对象播放文件,你只需为其指定一个音频文件并设定一个实现了 AVAudioPlayerDelegate 协议的 delegate 对象。这里举一个简单的例子,和上一个例子一样,实现一直循环播放的背景音乐:
   1.  - (void) playBackgroundSoundEffect {
   2.     NSString *soundFilePath =
   3.     [[NSBundle mainBundle] pathForResource: @"background"
   4.                                     ofType: @"wav"];
   5.     NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
   6.     AVAudioPlayer *newPlayer =
   7.     [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
   8.                                            error: nil];
   9.     [fileURL release];
  10.     self.player = newPlayer;
  11.     [newPlayer release];
  12.     [self.player prepareToPlay];
  13.     [self.player setDelegate: self];
  14.     self.player.numberOfLoops = -1;    // 循环播放音频,直到调用Stop方法
  15.     [self.player play];
  16. }



可 以看到,只要将 AVAudioPlayer 的 numberOfLoops 属性设为负数,音频文件就会一直循环播放直到调用 stop 方法。AVAudioPlayer 同样支持 Callback,这是 AVAudioPlayerDelegate 的一个可选 delegate 方法:
  - (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player successfully: (BOOL) flag {
        if (player == self.player && flag == YES) {
            NSLog(@"Playback finish.");
       }
  }

另外,你可以随时控制 AVAudioPlayer 对象的播放、暂停以及停止,通过判断对象的状态,分别调用 play、pause 和 stop 方法即可:
 -(IBAction) playOrPause: (id) sender {
     // 音频控制逻辑
     if (self.player.playing) {
         [self.player pause];
     } else {
         [self.player play];
     }

虽 然 AVAudioPlayer 可以播放很多格式,但是我们在实际开发过程中还是最好使用一些没有压缩的格式,比如 WAVE 文件,这样可以减少系统处理单元的资源占用,以便更好的完成程序的其他功能。另外,在使用 AVAudioPlayer 连续播放 mp3 这类经过压缩的音频文件时,在连接处可能出现一定的间隔时间。
  3. Audio Queue Services
      如果以上两种音频播放的解决方案都无法满足你的需求,那么我想你肯定需要使用 Audio Queue Services。使用 Audio Queue Services 对音频进行播放,你可以完全实现对声音的控制。例如,你可以在声音数据从文件读到内存缓冲区后对声音进行一定处理再进行播放,从而实现对音频的快速/慢速 播放的功能。因为 Audio Queue Services 相对复杂很多,Apple 官方已经把它整理为一本书了,具体可以参考 Audio Queue Services Programming Guide 和 SpeakHere 的程序示例。
  4. OpenAL
      OpenAL 是一套跨平台的开源的音频处理接口,与图形处理的 OpenGL 类似,它为音频播放提供了一套更加优化的方案。它最适合开发游戏的音效,用法也与其他平台下相同。iPhone 支持 OpenAL 1.1,具体的文档可以参考 OpenAL 的网站 http://openal.org 和 oalTouch 的程序示例。

  转载自:

http://www.cnblogs.com/lm3515/archive/2010/08/28/1811109.html


基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值