- 浏览: 37913 次
- 性别:
- 来自: 北京
最新评论
在 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 是最底层也是最简单的声音播放服务,调用 AudioServicesPlaySystemSound 这个方法就可以播放一些简单的音频文件,使用此方法只适合播放一些很小的提示或者警告音,因为它有很多限制:
■ 声音长度要小于 5 秒(一说小于30秒)
■ In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的
■ 打包成 .caf, .aif, 或者 .wav 的文件
■ 不能控制播放的进度
■ 调用方法后立即播放声音
■ 没有循环播放和立体声控制
另外,它还可以调用系统的震动功能,方法也很简单。具体的代码可以参考官方的示例SysSound,但是官方的示例只有一些简单的用法,从文档 中我们发现 可以通过 AudioServicesAddSystemSoundCompletion 方法为音频播放添加 CallBack 函数,有了 CallBack 函数我们可以解决不少问题,比如可以克服 System Sound Services 本身不支持循环播放的问题。以下代码可以实现一个在程序中循环播放的背景音乐:
view sourceprint? 011. static void completionCallback (SystemSoundID mySSID) {
02 2. // 音频重放
03 3. AudioServicesPlaySystemSound(mySSID);
04 4. }
05 5. - (void) playSound {
06 6. // 获得 main bundle
07 7. CFBundleRef mainBundle;
08 8. SystemSoundID soundFileObject;
09 9. mainBundle = CFBundleGetMainBundle ();
1010. // 获得声音文件的URL
1111. CFURLRef soundFileURLRef = CFBundleCopyResourceURL (
1212. mainBundle,
1313. CFSTR ("background"),
1414. CFSTR ("wav"),
1515. NULL
1616. );
1717. // 创建 system sound 对象
1818. AudioServicesCreateSystemSoundID (
1919. soundFileURLRef,
2020. &soundFileObject
2121. );
2222. // 播放结束回调
2323. AudioServicesAddSystemSoundCompletion (soundFileObject, NULL, NULL,
2424. completionCallback,
2525. (void*) self);
2626. // 播放音频
2727. AudioServicesPlaySystemSound(soundFileObject);
2828.
2929. }
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 对象。这里举一个简单的例子,和上一个例子一样,实现一直循环播放的背景音乐:
view sourceprint? 011. - (void) playBackgroundSoundEffect {
02 2. NSString *soundFilePath =
03 3. [[NSBundle mainBundle] pathForResource: @"background"
04 4. ofType: @"wav"];
05 5. NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
06 6. AVAudioPlayer *newPlayer =
07 7. [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
08 8. error: nil];
09 9. [fileURL release];
1010. self.player = newPlayer;
1111. [newPlayer release];
1212. [self.player prepareToPlay];
1313. [self.player setDelegate: self];
1414. self.player.numberOfLoops = -1; // 循环播放音频,直到调用Stop方法
1515. [self.player play];
1616. }
可 以看到,只要将 AVAudioPlayer 的 numberOfLoops 属性设为负数,音频文件就会一直循环播放直到调用 stop 方法。AVAudioPlayer 同样支持 Callback,这是 AVAudioPlayerDelegate 的一个可选 delegate 方法:
view sourceprint? 11. - (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player successfully: (BOOL) flag {
22. if (player == self.player && flag == YES) {
33. NSLog(@"Playback finish.");
44. }
55. }
另外,你可以随时控制 AVAudioPlayer 对象的播放、暂停以及停止,通过判断对象的状态,分别调用 play、pause 和 stop 方法即可:
view sourceprint? 1-(IBAction) playOrPause: (id) sender {
2 // 音频控制逻辑
3 if (self.player.playing) {
4 [self.player pause];
5 } else {
6 [self.player play];
7 }
虽 然 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.61ic.com/Mobile/iPhone/201102/29347.html
发表评论
-
IOS
2012-06-08 18:08 2141转自 http://site.douban.com/ ... -
iPhone4文件结构分析列表
2012-06-06 18:25 11、 【/Applications】 ... -
IOS 入门开发之使用Xcode4制作静态库详解
2012-05-23 16:40 1161雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原 ... -
NSError code错误列表信息(NSFileManage、NSURL...)
2012-05-14 13:05 2556NSError codes in the Cocoa erro ... -
iOS4中Core Motion框架的介绍和使用
2012-04-18 20:47 890http://www.kunli.info/2010/07/3 ... -
iOS5新开发的API总述——WWDC 2011
2012-03-23 13:03 1769转自 http://alloc.sinaapp.com ... -
中文版多线程编程指南
2012-03-19 19:33 916转自http://www.cocoachina.com/iph ... -
iPhone 路径大全
2012-03-13 11:41 9401、【/Applications】 常用 ... -
App Store审核指南
2012-03-08 19:19 934前言 感谢您付出宝 ... -
iOS设备型号与产品名称的对应
2012-03-07 21:47 2313"iPhone1,1" => &qu ... -
gzip文件的解压缩
2012-03-07 10:21 1388to allow zlib compression/decom ... -
iOS平台开发者总结出的宝贵上架经验
2012-03-06 16:06 1056以下是许多iOS平台开发者总结出的宝贵上架经验: 基本 ... -
版本控制清除所有.svn目录
2012-02-29 18:04 1535删除这些目录是很简单的,命令如下find . -type d ... -
UIView的一些基本方法理解:loadView、viewDidLoad、viewDidUnload、viewWillAppear、viewWillDisapp
2012-02-29 15:51 1792对于其它几个基本方法就不那么常用了,为了更好地编程使用这些方法 ... -
Zlib的deflate, z_stream结构的使用
2012-02-20 22:52 3634Zlib的deflate, z_stream结构的 ... -
iphone通讯录AddressBook.framework和AddressBookUI.framework的应用
2012-02-02 12:26 3158通讯录中联系人相关的应用iPhone提供了两个框架:Ad ...
相关推荐
SoundManager, 在Mac和iPhone上,播放音频的简单声音和音乐播放器类 命令行目SoundManager是在iOS或者Mac应用程序中播放声音和音乐的简单类。支持的操作系统&版本支持 build/Mac 8.0操作系统 10.8 ( Xcode 6.0,苹果...
音乐播放器 Music-Player-iPhone ,Music-player 是 iPhone 音乐播放器。实现上一曲,下一曲,暂停,播放,快进,锁屏操...
可以帮您把电脑上的音视频都转到iPhone手机上,随时随地看电影听音乐。本iPhone视频转换器设有专门的分类功能:有标准iPhone视频格式、高清晰iPhone视频格式、优化iPhone视频格式MPEG-4、宽频iPhone视频格式、iPhone...
3herosoft iPhone视频转换器是一个iPhone音乐转换器,它可以转换任何音频和视频格式,如WMA,MP2,AMR,OGG,RA,AC3到MP3,M4A,AAC和iPhone 3G播放的WAV,iPhone3GS,iPad 2,即使是最新的苹果iPad,iPhone 4S,...
该源码案例是一个可视化和控制音乐播放的iPhone视图控件,源码MusicPlayerViewController,MusicPlayerViewController是一个开源的iOS音乐播放组件,它的目标是成为一个嵌入的组件,通过复制音乐应用的用户界面为...
内置铃声内置铃声内置铃声内置铃声内置铃声内置铃声内置铃声内置铃声内置铃声
iphone上利用openal播放音乐和录音的实例
使用简单舒适的完美集成界面(需要兼容的应用程序)从Ubuntu PC控制iPhone或iPod Touch的音乐播放。 从Apple App Store下载“ Revererse Remote”,在Ubuntu笔记本电脑上安装Dock Remote Client,即可完成! 将Dock ...
使用苹果的iphone手机我们就要使用itunes工具,iTunes 是一款数字媒体播放应用程序由苹果电脑在2001年1月10日于就近上的 Macworld Expo 推出,用于播放以及管理数字音乐和与视频档案。 简单的说就是可以你的iphone和...
1、和apple设备通信,控制iphone音乐播放。 2、台灯亮度控制 3、闹钟设置 4、时间显示 5、调频收音机 6、功放 这个这个项目对大家有以下帮助: 1、学习ucosii编程 2、学习apple周边产品开发(机密哦!不是那儿都有,...
使用jquery+JS打造的网页播放器,使用简单、扩展性强、能同时兼容IE、firefox、傲游、Google Chrome、Safari浏览器,同时支持iphone上播放。 本插件优点: 1、使用简单:使用面向对象的思想编写。直接new Player...
仿jing.fm的音乐播放视图,点击唱片,唱片开始旋转,表示在播放音乐,再次点击,唱片停止旋转,并且出现暂停按钮。支持自定义参数。具体效果看gif动画吧。 作者说:有什么问题请到我博客留言,继续改进! 小编注...
iPhone游戏中既播放背景音乐又播放特效声音的办法 16 NSNotificationCenter用于增加回调函数 17 UINavigationBar 背景Hack 17 清除电话号码中的其他符号(源码) 18 正则判断:字符串只包含字母和数字 18 一行代码...
iphone 开发 音乐播放器源代码 简单的音乐播放器源代码 实现音乐播放添加 图片 动画等功能
iTunes是一款媒体播放器的应用程序,2001年1月10日由苹果电脑在旧金山的Macworld Expo推出,用来播放以及管理数字音乐和与视频文件。iTunes能连接到iTunes Store,以便下载购买的数字音乐、音乐影片、电视节目、iPod...
一款可以通过局域网让 iOS(iPhone/iPad)直接在电脑上播放音乐的工具,需要 Bonjour Print Services 支持,绿色版,解压就可以运行。 Shairport4w An AirPlay Audio-Receiver for your Windows-PC Play audio ...
它可以播放音乐和电影,处理图像和Web 页面。 也可以呈现PDF 文档和相册。第7章介绍用多种方法将数据导入或下载到程序中,并使用iPhone 的多点 触摸界面显示这些数据。 第8章:控件 UIControl 类为许多iPhone 交互式...
它可以播放音乐和电影,处理图像和Web 页面。 也可以呈现PDF 文档和相册。第7章介绍用多种方法将数据导入或下载到程序中,并使用iPhone 的多点 触摸界面显示这些数据。 第8章:控件 UIControl 类为许多iPhone 交互式...
它可以播放音乐和电影,处理图像和Web 页面。 也可以呈现PDF 文档和相册。第7章介绍用多种方法将数据导入或下载到程序中,并使用iPhone 的多点 触摸界面显示这些数据。 第8章:控件 UIControl 类为许多iPhone 交互式...