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

来源:互联网 发布:ray kurzweil 骗 知乎 编辑:程序博客网 时间:2024/05/01 05:31

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

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() {//播放按钮的监听器@Overridepublic 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() {//暂停按钮添加监听器@Overridepublic 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() {//停止按钮添加监听器@Overridepublic 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() {//音量增大按钮添加监听器@Overridepublic 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() {//音量降低按钮添加监听器@Overridepublic 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

代码中的音频:

运行结果: