在前面寫到了一個即時音效的應用,主要應用在短了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這個文件才能播放成功。還有一個切點就是這個播放音樂時,如果你停止了音樂,然后再點開始播放時就不起作用了,
什么原因在前面已經說過了。就是要重新緩沖一下才能播放。這個程序我還沒有改進,先寫到這里吧。