游戏里用到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以及网络加载资源的功能,留给各位自己去完成。
相关推荐
4. 声音管理:Android的AudioTrack和MediaPlayer类用于播放音效和背景音乐,源码中会展示如何控制音频流和同步。 5. 文件存储和网络通信:游戏可能会保存用户进度、高分,或者进行在线对战,这就涉及到SQLite数据库...
11. **最佳实践**:分享一些经验教训,如代码结构设计、测试策略和持续集成,帮助开发者构建高质量的游戏产品。 通过这份PPT,初学者可以系统地学习Android游戏开发,而经验丰富的开发者也能找到新的灵感和技巧。...
这是Android系统为了保证重要音频(如电话铃声)能被清晰听到而设计的一种策略。你的应用需要处理这种场景,通常通过改变音量或使用特殊的低音量模式来实现。 5. **释放音频焦点** 当播放结束或应用不再需要播放...
在Android手机游戏开发领域,开发者需要掌握一系列技术与工具,以创造出吸引人的、...《Android手机游戏开发大全》这本书可能会深入探讨这些主题,并提供实践经验分享,对于初学者和有经验的开发者都是宝贵的学习资源。
- **游戏开发基础**:学习游戏设计的基本原理和技术。 - **游戏循环概念**:理解游戏开发中的核心机制——游戏循环。 - **基本动画与交互**:介绍如何实现简单的动画效果和用户交互。 ##### 第4章:面向游戏开发者...
- **经典Asteroids™**:复刻经典街机游戏的经验分享。 - **Doom and Wolfenstein™3D**:移植3D第一人称射击游戏的挑战与解决方案。 #### 九、Android游戏开发资源推荐 - **书籍推荐**:除了本书外,还有哪些值得...
在实际开发过程中,结合吴亚峰的实战经验分享,将有助于开发者避开常见陷阱,提升开发效率。总之,《Android2.0游戏开发实战宝典源代码》是一个宝贵的资源,对于渴望在移动游戏领域一展身手的人来说,它是一条通向...
1. **Himi之Android游戏开发系列**:这本书可能包含了Himi的个人经验分享和实战案例,通常会深入浅出地讲解如何在Android平台上构建游戏。可能涵盖的主题包括使用Android SDK、游戏框架的选择(如Unity、Cocos2d-x或...
在Android游戏开发中,动画是提升用户体验和游戏沉浸感的关键因素。AuroraGT便是一款专为Android平台设计的游戏开发动画编辑器,旨在帮助开发者轻松创建流畅、生动的游戏动画。这款工具提供了丰富的功能和易用的界面...
"android雷电射击小游戏源码"是针对这一平台开发的一款经典飞行射击游戏,其背后蕴含了丰富的编程技术和设计思路。本文将深入探讨这个项目中的关键知识点,为Android游戏开发爱好者提供学习参考。 1. **游戏框架**...
总之,这个Android音乐播放器源码是学习Android音频处理和UI设计的宝贵资源。通过对源码的深入理解和实践,开发者可以提升自己的技能,为创建更优秀的音乐播放应用打下坚实基础。在实际项目中,可以借鉴源码中的设计...
5. 重复信息的特殊含义:文档中重复出现的访问稀酷客网站的请求,可能是为了强调该网站在Android游戏开发领域的重要性,以及提供该网站地址以方便读者进行资源的获取和知识的分享。 6. 对初学者的提示:虽然本书...
这个项目涵盖了Android应用开发中的多个重要知识点,包括用户界面设计、网络数据获取、音频流处理、媒体播放控制以及数据存储等。以下是这些关键知识点的详细说明: 1. **用户界面设计**:使用Android Studio中的...
用户界面(UI)设计部分,作者会分享如何设计吸引人的游戏界面,包括图标、按钮、菜单和动画的设计原则,以及如何使用Android的布局系统来创建可自适应的UI。此外,还会讨论游戏的控制机制,如触摸事件处理和物理...
9. **资源管理**:图像资源、音频资源的加载和释放,以及如何在XML中引用这些资源,都是Android开发中的常见操作。 10. **调试技巧**:学会使用Android Studio的调试工具,如Logcat来查看日志,或者使用调试器步进...
【Android冰冻泡泡游戏源码解析】 Android冰冻泡泡游戏是一款经典的...通过研究这个冰冻泡泡游戏的源码,开发者不仅能学到Android游戏开发的基础知识,还能了解到游戏设计的思路和技巧,为自己的项目开发积累经验。
总结来说,“抓住疯狂熊”这个游戏项目涵盖了Android游戏开发的基本流程,从游戏设计到发布,再到后期的维护和更新。通过学习这个项目,开发者可以深入了解Android平台的游戏开发技术,并锻炼解决问题和优化代码的...
7. **音频处理**:游戏可能包含背景音乐和音效,需要使用Android的音频API来管理音频资源。 8. **数据存储**:游戏进度、角色属性等信息可能存储在SQLite数据库或XML/JSON文件中,以便持久化。 9. **网络通信**:...
开发者通常会使用状态机模式来管理这些状态,每个状态对应一个类,通过状态之间的切换来控制游戏流程。 六、性能优化 为了确保游戏在不同设备上的流畅运行,开发者需要关注性能优化。这包括减少绘制调用、合理使用...
6. **音频处理**:游戏往往需要背景音乐和音效。了解如何在Android中播放和管理音频文件,使用Android的MediaPlayer或SoundPool类。 7. **存储与数据管理**:游戏数据的持久化是必要的,如用户进度、得分记录等。...