- 浏览: 38899 次
- 性别:
- 来自: 北京
最新评论
在 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 2186转自 http://site.douban.com/ ... -
iPhone4文件结构分析列表
2012-06-06 18:25 11、 【/Applications】 ... -
IOS 入门开发之使用Xcode4制作静态库详解
2012-05-23 16:40 1205雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原 ... -
NSError code错误列表信息(NSFileManage、NSURL...)
2012-05-14 13:05 2606NSError codes in the Cocoa erro ... -
iOS4中Core Motion框架的介绍和使用
2012-04-18 20:47 932http://www.kunli.info/2010/07/3 ... -
iOS5新开发的API总述——WWDC 2011
2012-03-23 13:03 1833转自 http://alloc.sinaapp.com ... -
中文版多线程编程指南
2012-03-19 19:33 967转自http://www.cocoachina.com/iph ... -
iPhone 路径大全
2012-03-13 11:41 9751、【/Applications】 常用 ... -
App Store审核指南
2012-03-08 19:19 966前言 感谢您付出宝 ... -
iOS设备型号与产品名称的对应
2012-03-07 21:47 2364"iPhone1,1" => &qu ... -
gzip文件的解压缩
2012-03-07 10:21 1428to allow zlib compression/decom ... -
iOS平台开发者总结出的宝贵上架经验
2012-03-06 16:06 1108以下是许多iOS平台开发者总结出的宝贵上架经验: 基本 ... -
版本控制清除所有.svn目录
2012-02-29 18:04 1576删除这些目录是很简单的,命令如下find . -type d ... -
UIView的一些基本方法理解:loadView、viewDidLoad、viewDidUnload、viewWillAppear、viewWillDisapp
2012-02-29 15:51 1820对于其它几个基本方法就不那么常用了,为了更好地编程使用这些方法 ... -
Zlib的deflate, z_stream结构的使用
2012-02-20 22:52 3689Zlib的deflate, z_stream结构的 ... -
iphone通讯录AddressBook.framework和AddressBookUI.framework的应用
2012-02-02 12:26 3197通讯录中联系人相关的应用iPhone提供了两个框架:Ad ...
相关推荐
本项目名为“iPhone音乐播放器代码”,其核心是实现一个能够在iPhone设备上运行的音乐播放应用,让用户能够播放、管理和享受他们的音乐收藏。 【描述】:“iPhone音乐播放器的一个代码” 这个描述简洁明了,表明这...
这款播放器在外观上模仿了iPhone的界面风格,为用户提供了一种熟悉的、仿真的音乐播放体验。它专为那些喜欢iPhone设计美学但可能无法承担其成本的用户设计,提供了一个免费的替代方案。 Visual Basic是微软公司推出...
7. 新技术和新功能的探索:随着技术的发展,iPhoneQQ音乐3.0的设计总结可能还包括了对新技术的尝试和探索,如增强现实(AR)、虚拟现实(VR)体验的音乐播放、人工智能(AI)辅助的音乐个性化推荐等。 以上仅为基于标题...
SoundManager, 在Mac和iPhone上,播放音频的简单声音和音乐播放器类 命令行目SoundManager是在iOS或者Mac应用程序中播放声音和音乐的简单类。支持的操作系统&版本支持 build/Mac 8.0操作系统 10.8 ( Xcode 6.0,苹果...
在iOS平台上,开发一款iPhone音乐程序涉及到多个技术层面和组件,包括使用Objective-C编程语言、Apple的iOS SDK以及多媒体框架。下面将详细讲解这个过程中的关键知识点。 首先,Objective-C是苹果开发iOS应用的主要...
在iOS平台上开发一款iPhone简易音频播放程序,涉及到的知识点涵盖了Objective-C编程语言、Apple的UIKit框架、AVFoundation框架以及多媒体处理。以下是对这些关键领域的详细解释: 1. **Objective-C编程语言**:作为...
标题中的“ios iphone音乐分享程序代码,全开源”意味着这是一个针对iOS平台的iPhone应用程序,它的主要功能是分享音乐。此程序的关键在于其开源特性,意味着开发者可以自由地查看、使用和修改源代码,以适应自己的...
在iTunes中,用户可以选择购买或者导入自己喜爱的音乐片段,将其转换为适合iPhone的M4R格式,这是iPhone支持的铃声格式。然后,通过USB线连接iPhone到电脑,同步这些铃声到设备上。 标签“内置铃声”意味着我们关注...
"豆瓣音乐电台-一个简单的音乐播放电台" 这个标题揭示了我们讨论的主题是一款基于豆瓣平台的音乐播放应用,专注于提供电台式的音乐体验。它以简洁易用为特点,允许用户轻松享受音乐,而无需复杂的操作。 【描述详解...
此外,iPhone还允许用户自定义铃声,可以从音乐库中选取喜欢的歌曲片段作为自己的专属铃声,这也是iPhone个性化的一大特点。 在"Iphone4提示音合集大全"这个压缩包中,你可以找到适用于iPhone 4的全部提示音。虽然...
2. MPMusicPlayerController:如果你的应用需要控制音乐播放(如暂停、快进、后退等),可以使用MPMusicPlayerController。它不仅支持本地音频文件,还能播放Apple Music和其他音乐服务的内容。 ```swift let music...
《深入解析:一款强大的iPhone音乐播放器源码》 在当今移动互联网时代,音乐播放器作为智能手机必备的应用之一,其开发技术与实现细节备受开发者关注。本篇文章将围绕标题为“一款很牛的音乐播放器(iPhone源码)”...
【iPhone手机音乐播放器的实现】讲解 在iOS开发中,构建一个iPhone手机音乐播放器涉及到多个技术层面,包括Objective-C编程语言、...通过合理利用这些工具和技术,可以构建出功能完备、用户体验良好的音乐播放应用。
同时,iTools还能帮助用户创建和编辑播放列表,打造个性化的音乐体验。 除此之外,iTools还提供了一些实用的附加功能,如屏幕录制、铃声制作、设备信息查看等。屏幕录制功能可以帮助用户记录手机操作过程,方便分享...
音乐播放器 Music-Player-iPhone ,Music-player 是 iPhone 音乐播放器。实现上一曲,下一曲,暂停,播放,快进,锁屏操...
3. **在线服务**:详述如何使用Safari浏览器浏览网页,如何在iPhone上使用社交应用如微信、QQ等,以及如何流媒体播放音乐或视频。 4. **节能模式**:解释节能模式如何影响在线体验,以及在电量低时如何平衡在线时间...
总结来说,iTools是一个强大的iOS设备管理工具,它提供了一键批量为iPhone音乐添加封面和歌词的功能,使得音乐播放变得更加美观和有趣。不仅如此,内置的多米音乐下载功能还能让你轻松获取更多音乐资源。如果你希望...
可以帮您把电脑上的音视频都转到iPhone手机上,随时随地看电影听音乐。本iPhone视频转换器设有专门的分类功能:有标准iPhone视频格式、高清晰iPhone视频格式、优化iPhone视频格式MPEG-4、宽频iPhone视频格式、iPhone...
用户可以将自己喜欢的音乐片段裁剪为30秒以内的铃声,并通过iTunes同步到iPhone。此外,一些精选的铃声可以通过购买或者免费下载的方式在iTunes商店获取。 3. **自定义铃声**:虽然官方途径有限制,但也有第三方...