android游戏开发系列(2)——背景音乐播放技术
背景音乐通常播放时间较长,且文件体积也相对较大。这类资源如果放在内存中,一方面给硬件资源本身就很紧缺的手机造成了负担,另一方面通常也没有这方面的需求,放在内存中,在调用时播放速度较快,而长时音乐文件通常作为背景音乐,速度稍微慢一些并不会影响太大。
android.media.MediaPlayer类是Android中用来控制音频,以及视频的类。应用该类,可以轻松实现对音频的处理。
MediaPlayer各个状态间关系如图:Idle状态为空闲,Initialized状态为初始化,Idle状态加载了音频资源后进入Initialized状态,之后调用prepare()方法就可以进入Prepared状态。在Prepared状态调用start()方法便可播放音乐。
音量的控制是播放音乐中常常用到的,Android中通过AudioManager类来控制音量:
AudioManager通过Context.getSystemService(Context.AUDIO_SERVICE)方法得到调用其他类的实例
public void adjustVolume(int derection, int flags)方法可以调节音量,direction为调节的方向,ADJUST_LOWER减小音量、ADJUST_RAISE增大音量、ADJUST_SAME保持音量不变。flags为标记、通常设置为0
public int getStreamMaxVolume(int streamType)方法得到最大音量
public int getStreamVolume(int stereamType)方法得到当前音量
下面通过一个简单的例子说明:
- package wyf.zcl;
- import android.app.Activity; //引入相关包
- import android.media.AudioManager; //引入相关包
- import android.media.MediaPlayer; //引入相关包
- import android.os.Bundle; //引入相关包
- import android.view.View; //引入相关包
- import android.widget.Button; //引入相关包
- import android.widget.Toast;
- public class MyActivity extends Activity {
- /** Called when the activity is first created. */
- private Button bPlay; //播放按钮
- private Button bPause; //暂停按钮
- private Button bStop; //停止按钮
- private Button bAdd; //增大音量
- private Button bReduce; //降低音量
- private boolean pauseFlag=false; //暂停标记,true暂停态,false非暂停态
- MediaPlayer mp; //MediaPlayer引用
- AudioManager am; //AudioManager引用
- @Override
- public void onCreate(Bundle savedInstanceState) { //Activity创建时调用
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main); //设置Activity的显示内容
- bPlay=(Button)findViewById(R.id.ButtonPlay); //播放按钮的实例化
- bPause=(Button)findViewById(R.id.ButtonPause); //暂停按钮的实例化
- bStop=(Button)findViewById(R.id.ButtonStop); //停止按钮的实例化
- bAdd=(Button)findViewById(R.id.ButtonVAdd); //增大音量按钮的实例化
- bReduce =(Button)findViewById(R.id.ButtonVReduce);//降低音量按钮的实例化
- mp=new MediaPlayer();
- am=(AudioManager) this.getSystemService(this.AUDIO_SERVICE);
- bPlay.setOnClickListener(new View.OnClickListener() {//播放按钮的监听器
- @Override
- public void onClick(View v) {
- try{
- mp.setDataSource("/sdcard/dl.mid"); //加载音频,进入Initialized状态。
- }catch(Exception e){e.printStackTrace();}
- try{
- mp.prepare(); //进入prepared状态。
- }catch(Exception e){e.printStackTrace();}
- mp.start(); //播放音乐
- Toast.makeText(MyActivity.this, "播放音乐", Toast.LENGTH_SHORT).show();
- }});
- bPause.setOnClickListener(new View.OnClickListener() { //暂停按钮添加监听器
- @Override
- public void onClick(View v) {
- if(mp.isPlaying()){ //如果是在播放态
- mp.pause(); //调用暂停方法
- pauseFlag=true; //设置暂停标记
- }else if(pauseFlag){
- mp.start(); //播放音乐
- pauseFlag=false; //设置暂停标记
- Toast.makeText(MyActivity.this, "暂停播放", Toast.LENGTH_SHORT).show();
- }}
- });
- bStop.setOnClickListener(new View.OnClickListener() { //停止按钮添加监听器
- @Override
- public void onClick(View v) {
- mp.stop(); //停止播放
- mp.reset(); //重置状态到uninitialized态
- try{
- mp.setDataSource("/sdcard/dl.mid"); //加载音频,进入Initialized状态。
- }catch(Exception e){e.printStackTrace();}
- try{
- mp.prepare(); //进入prepared状态。
- }catch(Exception e){e.printStackTrace();}
- Toast.makeText(MyActivity.this, "停止播放", Toast.LENGTH_SHORT).show();
- }});
- bAdd.setOnClickListener(new View.OnClickListener() { //音量增大按钮添加监听器
- @Override
- public void onClick(View v) {
- am.adjustVolume(AudioManager.ADJUST_RAISE, 0); //增大音量
- System.out.println("faaa");
- Toast.makeText(MyActivity.this, "增大音量", Toast.LENGTH_SHORT).show();
- }});
- bReduce.setOnClickListener(new View.OnClickListener() { //音量降低按钮添加监听器
- @Override
- public void onClick(View v) {
- am.adjustVolume(AudioManager.ADJUST_LOWER, 0); //减小音量
- Toast.makeText(MyActivity.this, "减小音量", Toast.LENGTH_SHORT).show();
- }});
- }
- }
代码:http://download.csdn.net/detail/lxq_xsyu/6268203
代码中的音频:
运行结果: