`
leecong1p
  • 浏览: 146456 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Android游戏设计中的音频控制经验分享

阅读更多

游戏里用到BGM和音效,常用播放音频的方法主要通过SoundPool和MediaPlayer两个类,单独使用时各有利弊,唯有结合才能扬长避短。

  • SoundPool

SoundPool,可以同时播放多个音效,但是缓存只有1M,只适合简短的游戏音效,不适合音乐。涉及的API主要有:load(加载音效,返回soundID)、unload、play(设置音量和循环参数,播放指定soundID且已加载的音效资源,并返回streamID)、stop(停止指定streamID的音效)、release(释放资源)。

具体API内容参照官方文档,这里我说明几点需要注意的问题:

1、SoundPool的unload的方法实际释放资源效果并不理想,当load加载超过256个将会出问题,只有release方法才能释放所有音效资源(注意是所有资源,需要重新加载)。

2、SoundPool是独立的线程加载音效,所以在调用load方法之后立刻play是没有效果的,这里需要实现SoundPool的OnLoadCompleteListener接口来回调,以判断是否完成资源加载,不过这个接口需要API8(2.2.x以上)支持。由于我需要针对可很能SDK版本低于2.0的机型,于是没有用回调接口,而是游戏初始化时加载所有最常用的音效,在每个场景加载或释放该场景需要的音效。具体使用的地方直接播放即可。实际上所有常用的音效加起来也不会超过1分钟,占用资源很少,用这个方法简单实用。

  • MediaPlayer

MediaPlayer,用以播放媒体文件,适合BGM等较大资源的音乐。涉及API主要是:setDataSource(设置音频源,可以是assets、sd卡、流)、isPlaying、stop、start、pause、reset、prepare(设置源以后需要调用此方法准备资源进入待播放状态)。

注意事项:

1、MediaPlayer也是独立的线程,但是不建议用多个MediaPlayer,一方面本身BGM播放时间长占用资源大,另一方面MediaPlayer开销也大。

2、MediaPlayer非常不适合播放音效,用它连续播放音乐会卡顿。绝大部分游戏,同时有且仅有一个BGM处于播放状态,所以游戏中用MediaPlayer播放BGM,用SoundPool播放音效,两者可以同时存在。

3、MediaPlayer播放下一个音频时,先使用reset方法使其恢复到idle状态,再设定音频源,否则连续几次就会出错。

4、release()以后即是end状态,这个MediaPlayer不能再使用。

5、设置完数据源后,你需要调用prepare()或prepareAsync()使资源进入待播放状态。对于流,你应该调用prepareAsync(),立即返回,而不是阻塞,直到足够的数据被缓冲。

6、跟SoundPool一样,MediaPlayer也不是调用了prepare方法就立刻可以start的,MediaPlayer线程需要一个加载并准备资源的时间。需要知道MediaPlayer什么时候完成资源准备,可以实现setOnPreparedListener接口。跟SoundPool情况不同,游戏BGM切换频繁,且不能一次性加载,setOnPreparedListener的回调方法在此显得尤为重要。非常巧的是,这个接口不需要高级别的SDK支持,难道是谷歌故意为之?

 

我的个人博客里有我封装的音频管理器代码,地址:www.leestorm.com。代码里没有给出FileLoader这个接口,实际上它是一个策略模式,实现者分别实现从SD卡、Assets、res以及网络加载资源的功能,留给各位自己去完成。

 

2
0
分享到:
评论
1 楼 butterfly_sky 2013-04-22  

相关推荐

    Android 蓝牙 音频焦点(Audio Focus)——卡音,多年安卓开发经验,从实际项目中获取到的经验,对安卓开发者非常有

    Android 蓝牙 音频焦点(Audio Focus)——卡音,多年安卓开发经验,从实际项目中获取到的经验,对安卓开发者非常有帮助。

    android开发资料大全

    Android 添加音频 在Android中实现多线程断点下载 Android提高篇内容整理 android移动开发案例精选 Android通过画线实现button效果 Android如何防止apk程序被反编译 Android 之 AIDL 和远程 Service 调用 Android ...

    Android 蓝牙 Audio音频输出通道切换详解_卡音,多年安卓开发经验,从实际项目中获取到的经验,对安卓开发者非常有帮助。

    Android 蓝牙 Audio音频输出通道切换详解_卡音,多年安卓开发经验,从实际项目中获取到的经验,对安卓开发者非常有帮助。

    Google.Android开发入门与实战

    值得一提的是,书中的开发实例很有创意,将传统互联网的内容/服务与移动平台紧密结合起来,如书中的豆瓣网客户端、在线音乐播放器等应用,都体现了移动互联网应用所需的创新精神及良好的用户体验理念,这个设计思路...

    V_Recorder_Editor_Pro_v3.6.0.apk

    V Recorder是一款稳定且流畅的屏幕录像机/游戏录像机/适用于Android的录像机,也是功能强大的多合一视频编辑器。VideoShow Recorder由VideoShow应用程序的同一团队创建,拥有超过4亿用户。它是最易于使用的免费屏幕...

    RealPlayer_v1.1.3.10

    这个由 RealNetworks 提供的全功能播放器,就是要带给您最棒的媒体使用经验。 RealPlayer 功能 – 在免费的 RealPlayer 应用程序中提供 • 音乐、视讯和相片齐集在一起 • 提供 9 种语文版本 • 适用于高分辨率装置...

    精品Kotlin文档项目资源,分享出来.zip

    本人作为一个Android开发者,在Kotlin语言正式出现在人们面前的时候,或多或少的接触到了这门语言,并 自学了一部分,当Google宣布Kotlin成为Android开发的标准语言时,才有打算用心的去学习这门语言,并能用于实际...

    安卓开发宝典进阶版.zip

    《安卓开发宝典进阶版》是一本针对安卓开发者的资源,它提供了深入的安卓开发知识和技巧,帮助开发者更好地理解和应用安卓开发的...安卓最佳实践:分享一些安卓开发的最佳实践和经验,帮助开发者写出高质量的安卓应用。

    从程序员到CTO大牛企业内部PDF与PPT合集.zip

    Go在大数据开发中的经验总结 基于Go构建滴滴核心业务平台的实践 京东分布式K-V存储设计与挑战 去哪网数据库架构发展历程 58速运数据库降压优化实践 云时代的数据库演变之路 阿里万亿级数据洪峰下的消息引擎 小米生态...

    全能视频转换工具 Leawo Prof. Media 8.2.2.0 中文.zip

    编辑视频和音频元素产生轻松的照片幻灯片:添加额外的照片,调整照片的顺序,添加背景音乐,设置输出的视频和音频效果等。 令人兴奋的 2D 到 3D 电影制作经验 作为最好的和最齐全的媒体转换器套件,Leawo Total ...

    3inons-crx插件

    我们有点想与人们分享我们的思想和经验。 2015年10月31日,我们以99 /-INR的价格购买了Domain 3nions.com。 我们仍然不知道为什么选择这个名字。 但坦率地说,它没有任何意义,并且该词在任何词典中都不存在。 无论...

Global site tag (gtag.js) - Google Analytics