《Android游戏编程入门经典》——14.1节使用MediaPlayer播放音频

本节书摘来自异步社区《Android游戏编程入门经典》一书中的第14章,第14.1节使用MediaPlayer播放音频,作者【美】Jonathan S. Harbour,更多章节内容可以访问云栖社区“异步社区”公众号查看

14.1 使用MediaPlayer播放音频
Android游戏编程入门经典
android.media.MediaPlayer类可以让我们访问多媒体系统,展示在Android上加载和播放音频和视频文件的方法。Media Player是流式传输大型音频/视频资产的一种有用工具,并且无需将它们完整地加载到内存中,因为可供Android应用程序和游戏使用的内存有限。但Media Player不适合具有多种音效的游戏。它不是一种基于混合器的音频系统;其目的是每次从一个来源播放。我们可以使用Media Player组件播放游戏背景音乐的音乐文件,然后使用android.media.SoundPool播放混合音效(本章稍后将会介绍它)。

14.1.1 受支持的音频格式
Android SDK支持几种常见的音频文件格式。下列列表显示了在游戏项目中可能使用的最常见的音频格式。要获得Android SDK支持的资产文件的完整列表,请访问/screenshow?s://developer. android.com/guide/appendix/media-formats.html。

WAV
OGG
MIDI
MP3

注意:

将音频文件从一种格式转换为另一种格式的简单方法是使用名为Audacity的免费音频编辑器程序,可从http://audacity.sourceforge.net下载它。它可以将文件转换为WAV、MP3和OGG格式,或者是从这些格式转换回原格式。

14.1.2 初始化MediaPlayer
在程序中必须包含导入库android.media.MediaPlayer以便访问MediaPlayer类。要创建MediaPlayer对象,请使用静态方法MediaPlayer.create(),如下所示:

14.1.3 将音频文件添加到项目中
resource参数应该是在项目的.resraw文件夹中找到的资源的标识符。默认情况下,.res是标准Android项目的一部分,但是不会自动创建raw子文件夹。因此,必须自己手动将此文件夹添加到项目中。图14.1显示了Audio Demo(音频演示)项目(本章稍后将介绍它)中的.resraw文件夹。


《Android游戏编程入门经典》——14.1节使用MediaPlayer播放音频

注意:

必须将.resraw文件夹手动添加到项目中,方法是创建此文件夹,然后将音频文件复制到新文件夹中。这样做时,资产管理器将检测文件并将它们添加到项目中。
资源标识符以大写字母R开头。此对象R表示项目的.res文件夹,具有由Eclipse检测到的详细资产列表。从 R 或.res开始,我们可以通过R.raw访问raw子文件夹。现在,在Eclipse中输入此内容时,将弹出一个在此文件夹中找到的资产列表。这非常有用。

说明:

由于内存使用问题,数字采样音频不是音乐的好选择。压缩的MP3或OGG文件可能只有4MB,但在加载它们时可能会增加到40MB。流式传输可能有用,但是会影响性能。建议对较长的音乐曲目选择小的非采样MIDI格式。
如果有一种Android不支持的音频文件格式或编解码器,将会怎么样?没有问题,可以使用名为Audacity的免费音频编辑工具将它转换为支持的格式,如图14.2所示。


《Android游戏编程入门经典》——14.1节使用MediaPlayer播放音频

只需将音频文件拖放到Audacity,或者使用File(文件)>Open(打开)命令加载文件。打开音频剪辑后,使用File(文件)>Export(导出)命令将文件导出为一种新格式,如图14.3所示。


《Android游戏编程入门经典》——14.1节使用MediaPlayer播放音频
AIFF (Apple) signed 16-bit PCM
WAV (Microsoft) signed 16-bit PCM
GSM 6.10 WAV (mobile)
MP3
Ogg Vorbis
FLAC
MP2
M4A (AAC) (FFmpeg)
AC3 (FFmpeg)
AMR (narrow band) (FFmpeg)
WMA (version 2) (FFmpeg)

14.1.4 播放音频剪辑
MediaPlayer对象包含将直接播放的音频示例,因此调用MediaPlayer.start()会开始播放加载的音频示例。

要暂停播放,请使用MediaPlayer.pause()。

同样,要完全停止播放,请使用MediaPlayer.stop()``。

上一篇:struts2笔记10-值栈


下一篇:ffmpeg开发指南