android 游戏开发之背景音乐的应用
在前面写到了一个即时音效的应用,主要应用在短了7s的声音,对于背景音乐这种对延时不是很严格的游戏来说,而又对音乐长度有要求的应用我们用的还是地MediaPlayer这个类里的东西。我们现在使用的音乐播放器大多也是用这个来实现的。所以游戏背景音乐对这个来说也是学习一下的。
初始代的步骤:
1、用MediaPlayer new一个对象出来
2、设置这个对象要播放的文件路径
3、调用用prepare()方法缓冲
4、调用.start()方法开始播放
5、播放过程可以调用stop()方法停止播放
6、播放过程也可以调用pasued()方法来暂停播放
注意:这里如果调用stop()方法停止播放之后,要重新返回到prepare()才能再次播放。
简单的播放代码如下:
package com.example.mediaplayer; import java.io.IOException; import android.app.Activity; import android.content.Context; import android.media.AudioManager; import android.media.MediaPlayer; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { // 按钮 private Button play_music; private Button stop_music; private Button pasued_music; private Button plus; private Button dec; private MediaPlayer mp; //MediaPlayer引用 private AudioManager am;//AudioManager引用 private int max;//最大音量 private int current;//当前音量 private int stepVolume;//一次增加的音量 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 按钮的初始化 play_music = (Button) findViewById(R.id.play_music); stop_music = (Button) findViewById(R.id.stop_music); pasued_music = (Button) findViewById(R.id.pause_music); plus = (Button) findViewById(R.id.plus); dec = (Button) findViewById(R.id.dec); mp=new MediaPlayer(); try { mp.setDataSource("/sdcard/music/test.mp3");//设置路径 mp.prepare();//缓冲 } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //调用声音 am=(AudioManager) this.getSystemService(Context.AUDIO_SERVICE); max=am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); stepVolume=max/8; // 按钮监听器 play_music.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mp.start(); Toast.makeText(getApplicationContext(), "音乐开始播放!", Toast.LENGTH_SHORT).show(); } }); pasued_music.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mp.pause(); Toast.makeText(getApplicationContext(), "音乐暂停播放!", Toast.LENGTH_SHORT).show(); } }); stop_music.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mp.stop(); Toast.makeText(getApplicationContext(), "音乐停止播放!", Toast.LENGTH_SHORT).show(); } }); plus.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { current=am.getStreamVolume(AudioManager.STREAM_MUSIC); int tempVolume=current+stepVolume; current=tempVolume<max?tempVolume:max; am.setStreamVolume(AudioManager.STREAM_MUSIC, current, AudioManager.FLAG_PLAY_SOUND); Toast.makeText(getApplicationContext(), "增加音量!", Toast.LENGTH_SHORT).show(); } }); dec.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { current=am.getStreamVolume(AudioManager.STREAM_MUSIC); int tempVolume=current-stepVolume; current=tempVolume>0?tempVolume:0; am.setStreamVolume(AudioManager.STREAM_MUSIC, current, AudioManager.FLAG_PLAY_SOUND); Toast.makeText(getApplicationContext(), "减少音量!", Toast.LENGTH_SHORT).show(); } }); } }
运行界面如下:
注意:要运行这个代码要先在
/sdcard/music/这个文件夹中放入test.mp3这个文件才能播放成功。还有一个切点就是这个播放音乐时,如果你停止了音乐,然后再点开始播放时就不起作用了,
什么原因在前面已经说过了。就是要重新缓冲一下才能播放。这个程序我还没有改进,先写到这里吧。
找一个博客做自己的女朋友,不管你跟她说什么她都帮你记录,这是多么幸福的一件事啊。如果有女生能做到这点,赶尽娶回家吧!