• 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

    代码中的音频:

    运行结果:



  • 相关阅读:
    模板学习系列(一)tuple
    apue读书笔记第十章
    在亚马逊上关于设计模式的一个评论
    编程珠玑笔记第12章习题
    编程珠玑第14章
    C#,.Net经典面试题目及答案
    sql where 1=1和 0=1 的作用(junyuz)
    快速排序算法
    一道面试题(C#实现了超大整数的加减乘法运算)
    数据结构实验之链表一:顺序建立链表
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469674.html
Copyright © 2020-2023  润新知