如果你有一台Android设备,就会注意到当你按下增大或降低音量按钮时,你所控制的不同音量设置取决于你正在运行的应用程序。在通话中,你控制的是输入语音流的音量;在视频播放器中,你控制的是视频音频的音量;在主屏幕上,你控制的是铃声的音量。
Android为不同的目的提供不同音频流。当我们在游戏中播放音频时,可使用类来输出音效和音乐到特定的音乐流。不过,在我们想播放音效或音乐之前,需要确定音量按钮控制了正确的音频流。为此,我们使用Context接口的另一个方法:
context.setVolumeControlStream(AudioManager.STREAM_MUSIC);
一如既往,Context的实现仍然由我们的活动来负责。调用该方法之后,音量按钮就控制了该音乐流,后面我们就可使用它来输出我们的音效和音乐。在活动的生命周期内我们只需要调用该方法一次,最好是在Activity.onCreate()方法中调用它。
首先我们要分清音乐流和音效的不同。后者一般是存储在内存中且其长度不会超过几秒钟。Android系统给我们提供了一个SoundPool类,使用它可以很容易实现音效播放。
我们可以很简单地初始化一个新的SoundPool实例,如下所示:
SoundPool soundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0);
第一个参数指定在同一时刻我们最多能播放多少个音效。这并不是说我们不能加载更多的音效文件,它只不过是限制可同时播放的音效个数。第二个参数指定 了SoundPool使用什么音频流来输出该音频。我们在这里选择音乐流,同时也已经为它设置好音量控件。最后一个参数现在没有使用,它应该为默认值0.
为了从一个音频文件加载音效到堆内存中,我们可使用SoundPool.load()方法。所有的文件都存储在assets/目录下,因此我们需要 重载SoundPool.load()方法。所有的文件都存储在assets/目录下,因此我们需要重载SoundPool.load()方法来获得一个 AssetFileDescriptor。我们怎么获得AssetFileDescriptor呢?使用AssetManager。这里我们使用 SoundPool从assets/目录加载一个名为explosion.ogg的OGG文件:
AssetFileDescriptor descriptor = assetManager.openFd("explosion.ogg");
int explosionId = soundPool.load(descriptor, 1);
通过AssetManager.openFd()方法可直接获得AssetFileDescriptor,而通过SoundPool可很容易地加载音效,第二个参数用于指定该音效的优先级。这个参数目前未使用,为了以后的兼容应设置为1.
SoundPool.load()方法将返回一个整型值,它将作为一个句柄用于加载的音效。当我们想播放音效时,只需要指定该句柄,SoundPool就知道该播放哪个音频。
soundPool.play(explosionId, 1.0f, 1.0f, 0, 0, 1);
第一个参数是从SoundPool.load()方法接受句柄。接下来两个参数分别用于指定左右通道的音量,其值应该从0(静音)到1(最大)
接下来两个参数我们很少使用,其中第一个参数是优先级,目前没有使用,并且应该设置为0.而另一个参数用于指定音效循环播放的频率,一般不建议循环 播放音效,因此设置为0。最后一个参数是播放速率,将其设置为大于1时,音效播放的速度将会比其在录制时快;而将它设置为小于1时,播放该音效就会比较 慢。
当我们不再需要一个音效并希望释放内存时,可使用SoundPool.unload()方法:
soundPool.unload(explosionId);
我们只需要将从SoundPool.load()方法接收的音效句柄传入即可,该方法会将音效从内存卸载。
当我们完成所有的音效输出且不再需要SoundPool时,需要调用SoundPool.release()方法来释放SoundPool所占用的所有资源。当然,在释放之后,我们不能再使用SoundPool,而且SoundPool所加载的所有音效也会被释放。
相关推荐
这篇详细的教程将带你从零开始学习Android游戏编程,并提供源码供你参考和实践。我们将会深入探讨以下几个关键知识点: 1. **Android基础知识**:首先,你需要熟悉Android开发环境,包括安装Android Studio、设置...
"Android游戏编程实例基础"这个主题旨在引导初学者逐步掌握Android游戏开发的基本技能。本资源提供了一个详细的实例教程,即《从零开始Android游戏编程(第二版)》,这本书是学习Android游戏开发的优秀教材。 首先...
本书《从零开始Android游戏编程(第二版)》是为那些想要踏入这个领域的初学者精心编写的。它将引导你逐步了解并掌握Android游戏开发的基本技术和流程,助你实现自己的游戏梦想。 首先,Android游戏编程的基础是...
《Android游戏编程书》是一本专注于Android平台游戏开发的详细指南,特别适合初学者入门。这本书以清晰易懂的语言,逐步介绍了如何从零开始构建一个完整的Android游戏。通过阅读此书,读者可以深入理解Android游戏...
在Android游戏编程的世界里,开发者需要掌握一系列技术来构建引人入胜的移动...在本教程的“Android游戏编程基础”中,你将找到更多关于这些主题的详细讲解,包括实例代码和实战指导,帮助你踏上Android游戏开发之旅。
这份“Android游戏编程ppt”提供了一套详尽的教程,帮助开发者深入理解和掌握Android游戏开发的核心概念。以下是对该PPT内容的详细解读: 1. **Android环境搭建**:首先,开发者需要安装并配置Android Studio,这是...
本篇文章将基于"从零开始Android游戏编程"这一主题,详细讲解Android游戏开发的基础知识,带你一步步踏入游戏编程的世界。 首先,我们需要理解Android游戏开发的核心技术栈。这包括Java或Kotlin语言基础,因为这两...
这篇资料《Android游戏编程从零开始》将引导初学者逐步踏入这个领域。以下是一些关键的知识点,这些知识点将构成你学习Android游戏开发的基础: 1. **Android基础知识**:首先,你需要了解Android操作系统的基本...
在《从零开始Android游戏编程(第二版)》这本书中,你将全面探索Android平台上的游戏开发过程,从基础知识到高级技术,逐步构建起扎实的游戏编程技能。Android游戏编程涉及多个方面,包括图形渲染、物理引擎、游戏...
在Android游戏编程中,首先需要理解的是Android的基本架构和开发环境。Android Studio是主要的集成开发环境,它提供了丰富的工具和功能,包括代码编辑、调试、性能分析等。开发者需要熟悉Gradle构建系统,它是...
《从零开始Android游戏编程(第二版)》是一本针对初学者的专业教程,旨在帮助读者逐步掌握Android平台上的游戏开发技术。这本书详细介绍了如何利用Java语言和Android Studio开发出丰富多彩的游戏应用。以下是从该书...
- **多媒体支持**:讲解如何在Android游戏中使用音频和视频资源。 ##### 第5章:构建Android游戏开发框架 - **自定义游戏引擎**:指导如何创建自己的游戏引擎。 - **游戏逻辑处理**:深入讨论游戏逻辑的设计与实现...
3. **OpenGL ES**:Android游戏编程常用OpenGL ES进行图形渲染,这是一个为嵌入式设备设计的图形库。你需要了解顶点、纹理、着色器语言(GLSL)以及如何使用它们创建2D和3D图形。 4. **游戏对象与精灵**:在Android...
总的来说,这个从零开始的飞机游戏项目是一次全面的Android游戏编程实践,涵盖了Android应用开发的多个方面,包括用户交互、图形渲染、事件处理以及游戏循环等核心概念。通过这个项目,你不仅可以学会如何创建一个...
在Android游戏编程的世界里,对初学者来说,每一步都可能是新奇且充满挑战的。"从零开始Android游戏编程"教程旨在引导那些对游戏开发感兴趣但又无从下手的人们,逐步掌握游戏开发的基本技能。这篇教程从最基础的环境...
这份"Android游戏编程源码"的资源集可以帮助初学者从零基础开始深入理解Android游戏开发的各个方面。以下是一些关键的知识点,它们是构建Android游戏的基础: 1. **Android SDK**:Android游戏开发的基础是Android...
在Android平台上进行Java游戏编程是一项充满挑战且富有乐趣的工作,它结合了移动设备的特性、Java语言的强大功能以及Android SDK的灵活性。以下是一些关于"Android Java游戏编程"的重要知识点: 1. **Android SDK**...