`
star65225692
  • 浏览: 268354 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类

Android游戏编程之音频编程

阅读更多

如果你有一台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 4游戏编程入门经典

     4.2.5 音频编程  4.2.6 播放音效  4.2.7 音乐流  4.2.8 基本图形编程  4.3 最佳实践  4.4 小结 第5章 android游戏开发框架  5.1 制定计划  5.2 androidfileio类  5.3 androidaudio、androidsound和android...

    Android 4 游戏编程入门经典(英文完整版)

     《android4游戏编程入门经典》囊括了成为一名成功的android游戏开发者所需的全部知识。本书是一本可以信赖的指南,能够帮助你在移动游戏开发中迅速“升级”。学完本书并加以融会贯通,就能够编写出成功的android...

    android游戏编程入门

    android游戏编程入门 《Android4游戏编程入门经典》是2012年清华大学出版社出版的图书,作者是(美)策希纳(Zechner,M.),无(美)格林(Green,R.)。 第1章 Android,后起之秀 1  1.1 Android简介 1  1.2 版本分裂 3 ...

    android之2D游戏编程-数独游戏

    三、 游戏涉及到的知识: android UI应用(Button,Menu,Dialog...) 国际化 样式的统一处理 2D应用 音频应用 数据存储(xml存储,数据库存储),PreferenceActivity的应用、sqlite应用

    《Android.4.游戏入门经典.第3版》PDF

    《Android 4游戏编程入门经典》囊括了成为一名成功的Android游戏开发者所需的全 部知识。本书是一本可以信赖的指南,能够帮助你在移动游戏开发中迅速“升级”。学完 本书并加以融会贯通,就能够编写出成功的Android...

    Beginning Android Games( Android 游戏开发入门)

    这会给你一切你需要另辟蹊径,写自己的Android游戏。 这本书将指导制作为Android平台的几个示例游戏的过程,并涉及广泛的议题: >游戏开发的基础 >Android平台的基础到应用的背景下做一个游戏的基础 的2D和3D...

    android开发资料大全

    从零开始Android游戏编程(第二版) 新版Android开发教程&笔记(1-12) eoeAndroid社区精华特刊共24期全部原创 《深入浅出Android--Google手持设备应用程序设计》下载 《Android编程指南》android-book.pdf 下载 ...

    Beginning Android Games - Mario Zechner

    在Android平台中游戏编程的基本知识 如何使用Android的图形的API(画布,OpenGL ES的1.0/1.1),音频,和用户输入,以反映这些基本面 如何从头开发两个2D游戏的基础上,画布的API和OpenGL ES。 如何创建一个全...

    Beginning Android Games 2

    *在Android平台中的游戏编程的基础 *如何使用Android的图形的API(画布的OpenGL ES 1.0/1.1),音频,和用户输入,以反映这些基本面 *如何从头开始开发两个2D游戏,在画布上和OpenGL ES。 *如何创建一个全功能的3D...

    Beginning Android Games 1

    *在Android平台中的游戏编程的基础 *如何使用Android的图形的API(画布的OpenGL ES 1.0/1.1),音频,和用户输入,以反映这些基本面 *如何从头开始开发两个2D游戏,在画布上和OpenGL ES。 *如何创建一个全功能的3D...

    Android程序设计基础

    通过逐渐在游戏中添加特性,你将学习Android编程的许多方面,包括用户界面、多媒体和Android生命周期。..  第一部分中将首先介绍Android,内容涉及如何安装Android模拟器,如何使用IDE(Intergrated Development ...

    [14本经典Android开发教程]-3-Android SDK 中文开发文档

    · 多媒体支持 包括常见的音频、视频和静态图像格式 (如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) · GSM 电话技术 (依赖于硬件) · 蓝牙Bluetooth, EDGE, 3G, 和 WiFi (依赖于硬件) · 照相机,GPS,...

    疯狂Android讲义源码

     第2章 Android应用的界面编程 35  2.1 界面编程与视图(View)组件 36  2.1.1 视图组件与容器组件 36  2.1.2 使用XML布局文件控制UI  界面 40  2.1.3 在代码中控制UI界面 41  2.1.4 使用XML布局文件和Java ...

    Android编程实现使用SoundPool播放音乐的方法

    本文实例讲述了Android编程实现使用SoundPool播放音乐的方法。分享给大家供大家参考,具体如下: 如果应用程序要播放密集、短促的音效,这时还用MediaPlayer就显得不合适了。MediaPlayer存在如下缺点: 1、资源占用...

    QQ欢乐斗地主-手机游戏-全套源代码

    腾讯手机游戏,QQ欢乐斗地主,游戏源码,全套完整的手机游戏源代码,做手游的同学绝对不容错过 package com.tq.tencent.android.sdk; import com.tq.tencent.android.sdk.cp_config.AppInfoConfig; public class ...

    疯狂Android讲义.part1

    第2章 Android应用的界面编程 35 2.1 界面编程与视图(View)组件 36 2.1.1 视图组件与容器组件 36 2.1.2 使用XML布局文件控制UI 界面 40 2.1.3 在代码中控制UI界面 41 2.1.4 使用XML布局文件和Java 代码混合控制UI...

    Text To Speech的Android编程方法(实例源码下载)

    摘要:Java源码,Android源码,Android实例 Text To Speech的Android编程方法(实例源码下载),一个Text ...Android Text To Speech将所指定的文本转成不同语言音频输出,方便嵌入到游戏或者应用程序中,增强用户体验。

Global site tag (gtag.js) - Google Analytics