AN Game音效: MediaPlayer

MediaPlayer的使用很简单。创建一个实例,然后调用prepare()准备函数,之后就可以播放音乐了

public class MySurfaceView extends SurfaceView implements Callback, Runnable {
	private final int MEDIAPLAYER_PAUSE = 0;
	private final int MEDIAPLAYER_PLAY = 1;
	private final int MEDIAPLAYER_STOP = 2;
	private int mediastate = 0;
	private MediaPlayer mediaPlayer;
	private int currentTime;
	private int musicMaxTime;
	private int currentVol;
	private int setTime = 5000;
	private AudioManager am;
	private Canvas canvas;
	private Paint paint;

	/*
	 * public MySurfaceView (Context context){ super(context); sfh =
	 * this.getHolder(); //为SurfaceView添加状态监听 sfh.addCallback(this); paint = new
	 * Paint(); paint.setColor(Color.WHITE); setFocusable(true); }
	 */
	public void surfaceCreated(SurfaceHolder holder) {
		mediaPlayer = MediaPlayer.create(context, R.raw.bgmusic);
		mediaPlayer.setLooping(true);
		musicMaxTime = mediaPlayer.getDuration();
		am = (AudioManager) MainActivity.instance
				.getSystemService(contect.AUDIO_SERVICE);
		MainActivity.instance.setVolumeControlStream(AudioManager.STREAM_MUSIC);

	}

	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {

	}

	public void surfaceDestroyed(SurfaceHolder holder) {

	}

	// 自定义绘图函数
	public void myDraw() {
		canvas.drawColor(Color.WHITE);
		paint.setColor(Color.RED);
		paint.setTextSize(15);
		canvas.drawText("当前音量:" + currentVol, 50, 40, paint);
		canvas.drawText("当前播放的时间(毫秒)/总时间(毫秒):", 50, 70, paint);
		canvas.drawText(currentTime + "/" + musicMaxTime, 100, 100, paint);
		canvas.drawText("方向键中间按钮切换 暂停/开始", 50, 130, paint);
		canvas.drawText("方向键<--快退" + setTime / 1000 + "秒", 50, 160, paint);
		canvas.drawText("方向键-->快退" + setTime / 1000 + "秒", 50, 190, paint);
		canvas.drawText("方向键向上增加音量  ", 50, 220, paint);
		canvas.drawText("方向键向下减少音量  ", 50, 250, paint);
	}

	// public boolean onTouchEvent(MotionEvent event){
	// tX=(int) event.getX();
	// tY=(int) event.getY();
	// myDraw();
	// return true;
	// }
	public boolean onKeyDown(int keyCode,KeyEvent event){
    	  if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER){
    		  try{
    			  switch(mediastate){
    			     case MEDIAPLAYER_PLAY:
    			    	 mediaPlayer.pause();
    			    	 mediastate=MEDIAPLAYER_PAUSE;
    			    	 break;
    			     case MEDIAPLAYER_PAUSE:
    			    	 mediaPlayer.start();
    			    	 mediastate = MEDIAPLAYER_PLAY;
    			    	 break;
    			     case MEDIAPLAYER_STOP:
    			    	 if(mediaPlayer!=null){
    			    		 mediaPlayer.pause();
    			    		 mediaPlayer.stop();
    			    		 //break;
    			    	 }
    			    	 mediaPlayer.prepare();
    			    	 mediaPlayer.start();
    			    	 mediastate=MEDIAPLAYER_PLAY;
    			    	 break;
    			  }
    		  }catch(IllegalStateException e){
    			  e.printStackTrace();
    		  }catch(IOException e){
    			  e.printStackTrace();
    		  }
    	  }
    	  else if(keyCode == KeyEvent.KEYCODE_DPAD_UP){
    		  am.setStreamVolume(AudioManager.STREAM_MUSIC, currentVol+1, AudioManager.FLAG_PLAY_SOUND);
    	  }
    	  else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){
    		  am.setStreamVolume(AudioManager.STREAM_MUSIC, currentVol-1, AudioManager.FLAG_PLAY_SOUND);
    	  }
    	  else if(keyCode ==KeyEvent.KEYCODE_DPAD_LEFT){
    		  if(currentTime-setTime<=0){
    			  mediaPlayer.seekTo(0);
    		  }
    		  else mediaPlayer.seekTo(currentTime-setTime);
    	  }

    	  else if(keyCode ==KeyEvent.KEYCODE_DPAD_RIGHT){
    		  if(currentTime-setTime>=musicMaxTime){
    			  mediaPlayer.seekTo(musicMaxTime);
    		  }
    		  else mediaPlayer.seekTo(currentTime+setTime);
    	  }
    	  return super.onKeyDown(keyCode, event);
      }

	// 游戏逻辑
	private void logic() {
		if (mediaPlayer != null) {
			currentTime = mediaPlayer.getCurrentPosition();
			currentVol = am.getStreamVolume(AudioManager.STREAM_MUSIC);
		} else {
			currentTime = 0;
		}
	}

	public void run() {

	}
}

例子2

public class MainActivity extends Activity {

	private ImageButton playOrPauseBtn,stopBtn;
	private MediaPlayer player;
	private boolean isPlaying;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
        //this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        playOrPauseBtn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				playOrPauseMusic();
			}
		});
        stopBtn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				stopMusic();
			}
		});
		
	}
	private void init(){
		player =MediaPlayer.create(this, R.raw.music.mp3);
		stopBtn.setEnabled(false);
	}
	private void playOrPauseMusic(){
		isPlaying=player.isPlaying();
		if(isPlaying){
			player.pause();
			playOrPauseBtn.setImageResource(R.drawable.play);
		}else{
			player.start();
			playOrPauseBtn.setImageResource(R.drawable.pause);
			
		}
		stopBtn.setEnabled(true);
	}
	private void stopMusic(){
		player.stop();
		playOrPauseBtn.setImageResource(R.drawable.play);
		stopBtn.setEnabled(false);
		try{
			player.prepare();//为下一次播放做准备
		}catch(IOException e){
			e.printStackTrace();
		}catch(IllegalStateException e){
			e.printStackTrace();
		}
		player.seekTo(0);
	}

}

1、播放SD卡中的文件

(1)实例化MediaPlayer对象

(2)设置播放路径setDataSource(String path),path表示的是文件的路径

(3)准备播放文件prepare(),播放文件start(),停止播放文件stop()

        MediaPlayer player =new MediaPlayer();
	String path="/sdcard/temp.mp3";
	player.setDataSource(path);
	player.prepare();
	plarer.start();
2、播放网络中的文件

(1)方法一

String path = http:XXXXXX.mp3;

接下来的和 上面雷同

(2)方法二

把网络中音频文件的路径转换成Uri,通过实例化MediaPlayer,再去播放

String path = http:XXXXXX.mp3;

Uri uri= Uri.parse(path);

MediaPlayer player =MediaPlayer.create(this,uri);


3、播放资源文件中的音频文件

(1)在项目中的res文件夹下建立文件夹 raw,把音频文件放在该文件夹中

(2)创建MediaPlayer对象,并调用它的静态方法实例化该对象MediaPlayer player = MediaPlayer.create(this,R.raw.temp);

(2)调用prepare()和start()播放音频文件


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值