MediaPlayer:使用简单,适合做游戏的背景音乐,资源占用量较高、延迟时间较长、不支持多个音频同时播放等。
音乐文件正常播放完毕,而又没有设置循环播放的话就进入该状态,并会触发OnCompletionListener的onCompletion()方法。
此时可以调用start()方法重新从头播放文件,也可以stop()停止MediaPlayer,或者也可以seekTo()来重新定位播放位置,播放下一首音乐
如果你设置了循环播放 mp.setLooping(true); 的话,那么永远都不会监听到播放完成的状态!!!!这里一定要注意!
SoundPool:适合播放游戏中的特效,如技能声音,怪物叫声等时间很短的音乐
1. SoundPool最大只能申请1M的内存空间。
2. 音频格式建议使用OGG格式。使用WAV格式的音频文件存放游戏音效,经过反复测试,在音效播放间隔较短的情况下会出现异常关闭的情况
3.在使用SoundPool播放音频的时候,如果在初始化中就调用播放函数进行播放音乐那么根本没有声音,不是因为没有执行,而是 SoundPool需要一准备时间
----------------------------------------------------------------------------------------------------------------
下面以实例说明:
首先看效果
你不停的点击在MediaPlayer与SoundPool发射子弹是会发现,SoundPool的更适合做音乐特效,MediaPlayer适合做背景音乐。
其他不做解释:自己下载源码,亲自运行,然后打开背景音乐,不停的点击右侧的6个发射按钮,慢慢体验,你会明白的。。。
在看代码
package dk.game;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
public class MusicTestActivity extends Activity {
private MediaPlayer mediaPlayerBg;
private MediaPlayer mediaPlayerTeXiao1;
private MediaPlayer mediaPlayerTeXiao2;
private MediaPlayer mediaPlayerTeXiao3;
private SoundPool soundPool;
private AudioManager am;
private int maxVol;
private int loadId1,loadId2,loadId3;
private Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//全屏显示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//去掉标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
//横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.main);
//获得当前的上下文
context=getApplicationContext();
mediaPlayerBg=MediaPlayer.create(context, R.raw.bgmusic);
//背景音乐循环播放
mediaPlayerBg.setLooping(true);
mediaPlayerTeXiao1=MediaPlayer.create(context, R.raw.shoot1);
mediaPlayerTeXiao2=MediaPlayer.create(context, R.raw.shoot2);
mediaPlayerTeXiao3=MediaPlayer.create(context, R.raw.shoot3);
//SoundPool的初始化
/*
* 第一个参数是:同时播放特效的数量
* 第二个参数是:音乐播放的音频流
* 第三个参数是:音乐的质量
*/
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 100);
loadId1=soundPool.load(context, R.raw.shoot1, 1);
loadId2=soundPool.load(context, R.raw.shoot2, 1);
loadId3=soundPool.load(context, R.raw.shoot3, 1);
/*
* Android OS中,如果你去按手机上的调节音量的按钮,会分两种情况,
* 一种是调整手机本身的铃声音量,一种是调整游戏,软件,音乐播放的音量
* 当我们在游戏中的时候 ,总是想调整游戏的音量而不是手机的铃声音量,
* 可是烦人的问题又来了,我在开发中发现,只有游戏中有声音在播放的时候
* ,你才能去调整游戏的音量,否则就是手机的音量,有没有办法让手机只要是
* 在运行游戏的状态就只调整游戏的音量呢?试试下面这段代码吧!
* setVolumeControlStream(AudioManager.STREAM_MUSIC);
* 设定调整音量为媒体音量,当暂停播放的时候调整音量就不会再默认调整铃声音量了
*/
setVolumeControlStream(AudioManager.STREAM_MUSIC);
// 获取音频服务然后强转成一个音频管理器,后面方便用来控制音量大小用
am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
// 获取最大音量值(15最大! .不是100!)
maxVol = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
}
/**
* 播放背景音乐
* @param view
*/
public void startBgMusic(View view){
if(mediaPlayerBg != null) {
mediaPlayerBg.stop();
}
try {
mediaPlayerBg.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayerBg.start();
}
/**
* 停止播放背景音乐
* @param view
*/
public void stopBgMusic(View view){
mediaPlayerBg.stop();
}
/**
* MediaPlayer特效1
* @param view
*/
public void playTeXiao1(View view){
if(mediaPlayerTeXiao1 != null) {
mediaPlayerTeXiao1.stop();
}
try {
mediaPlayerTeXiao1.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayerTeXiao1.start();
}
/**
* MediaPlayer特效2
* @param view
*/
public void playTeXiao2(View view){
if(mediaPlayerTeXiao2 != null) {
mediaPlayerTeXiao2.stop();
}
try {
mediaPlayerTeXiao2.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayerTeXiao2.start();
}
/**
* MediaPlayer特效2
* @param view
*/
public void playTeXiao3(View view){
if(mediaPlayerTeXiao3 != null) {
mediaPlayerTeXiao3.stop();
}
try {
mediaPlayerTeXiao3.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayerTeXiao3.start();
}
/**
* SoundPool特效1
* @param view
*/
public void playSoundPoolTeXiao1(View view){
//参数1:播放特效加载后的ID值
//参数2:左声道音量大小(range = 0.0 to 1.0)
//参数3:右声道音量大小(range = 0.0 to 1.0)
//参数4:特效音乐播放的优先级,因为可以同时播放多个特效音乐
//参数5:是否循环播放,0只播放一次(0 = no loop, -1 = loop forever)
//参数6:特效音乐播放的速度,1F为正常播放,范围 0.5 到 2.0
soundPool.play(loadId1, 0.5f, 0.5f, 1, 0, 1f);
}
/**
* SoundPool特效2
* @param view
*/
public void playSoundPoolTeXiao2(View view){
soundPool.play(loadId2, 0.5f, 0.5f, 1, 0, 1f);
}
/**
* SoundPool特效3
* @param view
*/
public void playSoundPoolTeXiao3(View view){
soundPool.play(loadId3, 0.5f, 0.5f, 1, 0, 1f);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/bg"
android:layout_height="fill_parent" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:text="停止背景音乐"
android:onClick="stopBgMusic"
/>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/button1"
android:layout_alignParentLeft="true"
android:text="播放背景音乐"
android:onClick="startBgMusic"
/>
<Button
android:id="@+id/button43"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:text="SoundPool发射子弹3"
android:onClick="playSoundPoolTeXiao3"
/>
<Button
android:id="@+id/button42"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_above="@id/button43"
android:text="SoundPool发射子弹2"
android:onClick="playSoundPoolTeXiao2"
/>
<Button
android:id="@+id/button41"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_above="@id/button42"
android:text="SoundPool发射子弹1"
android:onClick="playSoundPoolTeXiao1"
/>
<Button
android:id="@+id/button23"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/button43"
android:layout_alignParentBottom="true"
android:text="MediaPlayer发射子弹3"
android:onClick="playTeXiao3"
/>
<Button
android:id="@+id/button22"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/button42"
android:layout_above="@id/button23"
android:text="MediaPlayer发射子弹2"
android:onClick="playTeXiao2"
/>
<Button
android:id="@+id/button21"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/button41"
android:layout_above="@id/button22"
android:text="MediaPlayer发射子弹1"
android:onClick="playTeXiao1"
/>
</RelativeLayout>
</LinearLayout>
最后源码
:郁闷文件大小不能超过10MB,分成2个压缩包了
- 大小: 69.6 KB
分享到:
相关推荐
Android 中级教程之------Android MediaPlayer播放mp3的实例 是提示性代码!
android安卓app音频播放方式 MediaPlayer与SoundPool的区别.zip
MediaPlayer与SoundPool实现多个音频同时播放,背景音乐、音效!
Android MediaPlayer Playback---多媒体开发应用程序接口
从头学Android之多媒体--使用MediaPlayer播放音频示例代码
3-7(ProgressBar进度条) 3-8(SeekBar 拖动条) 3-9(Tab分页式菜单) 4-10(可视区域) 4-11-1(Animation动画) 4-11-2-1(动态位图) 4-11-2-2(帧动画) 4-11-2-3(剪切图动画) 4-13(操作游戏主角) 4-14-1(矩形碰撞) 4-14-2...
收集到的一个非常好的安卓组件播放声音的小实例,区分了MediaPlayer和SoundPool两种方法的不同用法,会给初学者带来很大的帮助
android背景音乐、背景音效实例,其中大音频音乐播放使用MediaPlayer实现,小音频音效播放使用SoundPool实现
60个Android开发精典案例 Android软件源码: 2-1(Activity生命周期) 3-1(Button与点击监听器) 3-10-1(列表之ArrayAdapter适配) 3-10-2(列表之SimpleAdapter适配) 3-11(Dialog对话框) 3-12-5(Activity跳转与操作) 3-12...
MediaPlayer SoundPool 游戏点击声 背景音乐,程序员,这种代码不需要解释
介绍android如果使用两个工具类进行声音播放 详见转载博客 http://blog.csdn.net/ygswine/article/details/17297571
windows编程案例--Flash MediaPlayer
4-15-1(MediaPlayer音乐).7z
《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 ...
《Android应用开发揭秘》内容全面,不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发、Android游戏...
杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件行业协会...
使用VideoView播放视频简单、方便,但有些早期的开发者还是更喜欢使用MediaPlayer来播放视频,但由于MediaPlayer主要用于播放音频,因此它没有提供图像输出界面,此时就需要借助于SurfaceView来显示MediaPlayer播放...
背景音乐通常播放时间较长,且文件体积也相对较大。这类资源如果放在内存中,一方面给硬件资源本身就很紧缺的手机造成了负担,另一方面通常也没有这方面的需求,放在内存中,在调用时播放速度较快,而长时音乐文件...
第10章 Android应用开发 实例 10.1 情境模式 10.2 文件管理器 10.3 通讯录 10.4 音乐播放器 10.5 天气预报 10.6 个人地图 10.7 Widget日历 10.8 小结 第11 章Android游戏开发实例 11.1 手机游戏开发简介 11.2 游戏...