当前位置:操作系统 > 安卓/Android >>

Android 游戏开发之MediaPlayer、SoundPool以及AudioManager

一、MediaPlayer
1.获取MediaPlayer实例
[java] 
MediaPlayer.create(Context context,int resId);  //参数一:上下文对象,参数二:音乐资源ID,一般放在raw文件夹下。如果没有raw就自己创建一个 

2.MediaPlayer常用的函数
[java]
prepare();//为播放音乐文件做准备工作 
 
start();//播放音乐 
 
pause();//暂停音乐播放 
 
stop();//停止音乐播放 
注:pause()和stop(),主要的区别在于:暂停播放后可以调用start()继续播放,停止音乐播放后,需要调用prepare()再调用start()进行播放音乐。
 
3.MediaPlayer其它常用函数
[java] 
setLooping(boolean looping);//设置音乐是否循环播放,true为循环播放 
 
seekTo(int msec);//将音乐播放跳转到某一时间点,以毫秒为单位 
 
getDuration();//获取播放的音乐文件总时间长度 
 
getCurrentPosition();//获取当前播放音乐时间点 
 
二、AudioManager(音乐管理类,可以获取当前音乐大小以及最大音量)
1.获取AudioManager实例
[java] 
AudioManager am = new AudioManager(); 
2.AudioManager常用函数
[java] 
setStreamVolume(imt streamType,int index,int flags) ;//设置音量大小,参数一:音乐类型(AudioManager.STREAM_MUSIC),参数二:音量大小,参数三:设置一个或者多个标志 
 
getStreamVolume(int streamType);//获取当前音量大小,参数 获取音量大小类型 
 
getStreamMaxVolume(int streamType);// 获取当前音量最大值,参数获取音量大小的类型 
注:操作手机音乐播放需要使用函数:Activity.setVolumeControlStream(int streamType) 设置控制音量类型,参数:音量类型(AudioManager.STREAM_MUSIC)
三、SoundPool
1.获取SoundPool实例
[java] 
new  SoundPool(int maxStreams,int streamType,int srcQuality);   //参数一:允许同时播放的声音最大值,参数二:声音类型,参数三:声音品质 
2.SoundPool常用函数
[java] 
int load(Context context,int resId,int priority);  //加载音乐文件,返回音乐ID(音乐流文件数据) 参数一:Context实例,参数二:音乐文件ID,参数三:标志优先考虑的声音。目前使用没有任何效果,只是具备兼容性价值。一般写个1就可以。 
 
int play(int soundId,float leftVolume,float rightVolume,int proority,int loop,float rate);   //音乐播放,播放失败返回0,正常则返回非0值,参数一:加载后得到的音乐文件,参数二:音量的左声道 范围0.0~1.0  参数三:音量的右声道,范围 0.0~1.0  参数四:音乐流的优先级,0为最低优先级,参数五:音乐播放次数,-1表示无限循环,0表示正常一次,大于0则表示循环次数,参数六:播放速率,取值范围:0.5~2.0,1.0表示正常播放。 
 
pause(int streamID);  //暂停音乐播放  ,参数:音乐文件加载后的流ID 
 
stop(int streamID) ; //结束音乐播放 参数:音乐文件加载后的流ID 
 
release();  //释放SoundPool的资源 
 
setLoop(int streamID,int loop);  //设置循环次数 参数一:音乐文件加载后的流ID,参数二:循环次数 
 
setReat(int streamID);  //设置播放速率 
 
setVolume(int streamID,float leftVolume,float rightVolume);   //设置音量大小,参数二:左声道音量,参数三:右声道音量 
 
setPriority(int streamID,int priority);   //设置流的优先级,参数二:优先级值。 
 
四、MediaPlayer与SoundPool分析
1.MediaPlayer的优缺点:
缺点:资源占用量较高、延迟时间较长、不支持多个音频同时播放等。在快速连续播放声音(连续猛点按钮)时,会出现1~3秒左右的延迟;当然此问题可以使用MediaPlayer.seekTo()这个方法解决。
优点:支持恨大的音乐文件播放,而且不会同SoundPool一样需要加载准备一段时间,MediaPlayer能及时播放音乐。
2.使用SoundPool的优缺点:
缺点:最大只能申请1M的内存空间,意味着用户只能使用一些很短的声音片段,而不能用它来播放歌曲或游戏背景音乐。SoundPool提供了Pause和stop方法,但建议最好不要轻易使用这些方法,因为使用它们会导致程序莫名其妙的终止。使用SoundPool播放音频格式建议使用OGG格式。如果使用WAV格式的音频文件,在播放的情况下有时会出现异常关闭的情况。在使用SoundPool播放音乐文件的时候,如果在构造中就调用播放函数进行播放音乐,其效果则是没有声音!不是因为函数没有执行,而是SoundPool需要加载准备时间!当然这个准备时间很短,不会影响使用,只是程序一运行播放刚开始没有声音罢了。
优点:
支持多个音乐文件同时播放。
 
通过以上分析,在Android游戏开发中,游戏背景音乐使用MediaPlayer肯定比使用SoundPool要合适;而游戏音效的播放采用SoundPool则更好。
 

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,