android游戏开发中音频控制的经验
来源:互联网 发布:极限挑战 黄磊 知乎 编辑:程序博客网 时间:2024/05/16 05:23
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支持,难道是谷歌故意为之?
- android游戏开发中音频控制的经验
- android游戏开发如何进行音频控制
- Uinty3D游戏开发技术之音频控制
- Android:游戏中添加音频
- [Android游戏开发经验分享]游戏开发中内存溢出的OOM解决方案——内存图片回收机制
- [Android游戏开发经验分享]游戏开发中图片的不同分辨率适配和坐标适配
- 游戏中音频的处理
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPool的利弊以及各个在游戏中的用途!
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- (转)【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- Android开发之控制手机音频
- 关于android游戏开发的一些基础和个人经验
- HDU 4737 A Bit Fun
- Linux 搭建SVN 服务器
- Java中的连字符
- 矩形类
- MBTI性格测试2
- android游戏开发中音频控制的经验
- Oracle中表的四种连接方式讲解
- Android初级教程_获取Android控件的宽和高
- oracle中 alter 用法 与 decode 用法
- 【技术类】【ArcGIS对国产卫星的支持2:高分一号卫星】篇10、缓存影像服务发布
- exit()与_exit()函数的区别(Linux系统中)
- fedora make: gcc:命令未找到(解决方法)
- fdisk -l显示信息详解
- 第五周项目一:三角形类函数