android游戏开发系列(2)——背景音乐播放技术

android游戏开发系列(2)——背景音乐播放技术

分类: android游戏开发系列 88人阅读 评论(0) 收藏 举报
android 游戏 声音 MediaPlayer

背景音乐通常播放时间较长,且文件体积也相对较大。这类资源如果放在内存中,一方面给硬件资源本身就很紧缺的手机造成了负担,另一方面通常也没有这方面的需求,放在内存中,在调用时播放速度较快,而长时音乐文件通常作为背景音乐,速度稍微慢一些并不会影响太大。

android.media.MediaPlayer类是Android中用来控制音频,以及视频的类。应用该类,可以轻松实现对音频的处理。

 MediaPlayer各个状态间关系如图:Idle状态为空闲,Initialized状态为初始化,Idle状态加载了音频资源后进入Initialized状态,之后调用prepare()方法就可以进入Prepared状态。在Prepared状态调用start()方法便可播放音乐。

android游戏开发系列(2)——背景音乐播放技术_第1张图片

音量的控制是播放音乐中常常用到的,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)方法得到当前音量

下面通过一个简单的例子说明:

[java] view plain copy
  1. package wyf.zcl;  
  2. import android.app.Activity;            //引入相关包  
  3. import android.media.AudioManager;      //引入相关包  
  4. import android.media.MediaPlayer;       //引入相关包  
  5. import android.os.Bundle;               //引入相关包  
  6. import android.view.View;               //引入相关包  
  7. import android.widget.Button;           //引入相关包  
  8. import android.widget.Toast;  
  9. public class MyActivity extends Activity {  
  10.     /** Called when the activity is first created. */  
  11.     private Button bPlay;                   //播放按钮  
  12.     private Button bPause;                  //暂停按钮  
  13.     private Button bStop;                   //停止按钮  
  14.     private Button bAdd;                    //增大音量  
  15.     private Button bReduce;                 //降低音量  
  16.     private boolean pauseFlag=false;        //暂停标记,true暂停态,false非暂停态  
  17.     MediaPlayer mp;                         //MediaPlayer引用  
  18.     AudioManager am;                        //AudioManager引用  
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState) {   //Activity创建时调用  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.main);                  //设置Activity的显示内容  
  23.         bPlay=(Button)findViewById(R.id.ButtonPlay);    //播放按钮的实例化  
  24.         bPause=(Button)findViewById(R.id.ButtonPause);  //暂停按钮的实例化  
  25.         bStop=(Button)findViewById(R.id.ButtonStop);    //停止按钮的实例化  
  26.         bAdd=(Button)findViewById(R.id.ButtonVAdd);     //增大音量按钮的实例化  
  27.         bReduce =(Button)findViewById(R.id.ButtonVReduce);//降低音量按钮的实例化  
  28.         mp=new MediaPlayer();  
  29.         am=(AudioManager) this.getSystemService(this.AUDIO_SERVICE);  
  30.         bPlay.setOnClickListener(new View.OnClickListener() {//播放按钮的监听器  
  31.             @Override  
  32.             public void onClick(View v) {  
  33.                  try{  
  34.                         mp.setDataSource("/sdcard/dl.mid");     //加载音频,进入Initialized状态。  
  35.                     }catch(Exception e){e.printStackTrace();}  
  36.                     try{  
  37.                         mp.prepare();                           //进入prepared状态。  
  38.                     }catch(Exception e){e.printStackTrace();}  
  39.                 mp.start();                                     //播放音乐  
  40.                 Toast.makeText(MyActivity.this"播放音乐", Toast.LENGTH_SHORT).show();  
  41.         }});  
  42.         bPause.setOnClickListener(new View.OnClickListener() {  //暂停按钮添加监听器  
  43.             @Override  
  44.             public void onClick(View v) {  
  45.                 if(mp.isPlaying()){                             //如果是在播放态  
  46.                     mp.pause();                                 //调用暂停方法  
  47.                     pauseFlag=true;                             //设置暂停标记  
  48.                 }else if(pauseFlag){  
  49.                     mp.start();                                 //播放音乐  
  50.                     pauseFlag=false;                            //设置暂停标记  
  51.                 Toast.makeText(MyActivity.this"暂停播放", Toast.LENGTH_SHORT).show();   
  52.             }}  
  53.         });  
  54.         bStop.setOnClickListener(new View.OnClickListener() {   //停止按钮添加监听器  
  55.             @Override  
  56.             public void onClick(View v) {  
  57.                 mp.stop();                                      //停止播放  
  58.                  mp.reset();                                    //重置状态到uninitialized态  
  59.                  try{  
  60.                         mp.setDataSource("/sdcard/dl.mid");     //加载音频,进入Initialized状态。  
  61.                  }catch(Exception e){e.printStackTrace();}  
  62.                     try{  
  63.                         mp.prepare();                           //进入prepared状态。  
  64.                     }catch(Exception e){e.printStackTrace();}  
  65.                     Toast.makeText(MyActivity.this"停止播放", Toast.LENGTH_SHORT).show();  
  66.         }});  
  67.         bAdd.setOnClickListener(new View.OnClickListener() {    //音量增大按钮添加监听器  
  68.             @Override  
  69.             public void onClick(View v) {  
  70.             am.adjustVolume(AudioManager.ADJUST_RAISE, 0);      //增大音量  
  71.             System.out.println("faaa");  
  72.             Toast.makeText(MyActivity.this"增大音量", Toast.LENGTH_SHORT).show();  
  73.         }});  
  74.         bReduce.setOnClickListener(new View.OnClickListener() { //音量降低按钮添加监听器  
  75.             @Override  
  76.             public void onClick(View v) {  
  77.             am.adjustVolume(AudioManager.ADJUST_LOWER, 0);      //减小音量  
  78.             Toast.makeText(MyActivity.this"减小音量", Toast.LENGTH_SHORT).show();  
  79.         }});  
  80.     }  
  81. }  

代码:http://download.csdn.net/detail/lxq_xsyu/6268203

代码中的音频:

运行结果:

android游戏开发系列(2)——背景音乐播放技术_第2张图片


你可能感兴趣的:(android游戏开发系列)