2012-05-20 64 views
0

我需要每次用戶按下單個按鈕時播放相同的短wav文件(1秒)。我有以下代碼可用於約30次點擊,然後應用程序上的「強制關閉」應用程序。我認爲發生的事情是媒體播放器的新實例正在創建,然後實例(約30次點擊)和應用程序崩潰。於是我添加了「發佈」實例,希望在點擊按鈕時wav會播放,然後mediaplayer將被釋放。但是,它不是那樣工作的。使用mp.release()時,可能沒有聲音播放,因爲medaiplayer會很快釋放,以便用戶聽到聲音?多次播放WAV文件

任何人都有一個很好的提示,幫助我得到這個工作?非常感謝你。

Button button2 =(Button)findViewById(R.id.button10); button2.setOnClickListener(新View.OnClickListener(){

 public void onClick(View v) { 
      // Perform action on click 
      MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.clicker); 
      mp.start(); 
      mp.release(); 
+1

你檢查logcat找到崩潰的確切原因?而且,你似乎已經回答了你自己的問題:p – keyser

回答

0

其簡單的只需要創建的MediaPlayer一次,並播放一段時間。

private MediaPlayer mp; 
public void onClick(View v) { 
      // Perform action on click 
      if (mp == null){ 
       mp = MediaPlayer.create(getApplicationContext(), R.raw.clicker); 
      } 
      mp.start(); 
} 
0

下面是簡單的解決方案,將工作

MediaPlayer mp; 
mp = MediaPlayer.create(getApplicationContext(), R.raw.clicker); 

public void onClick(View v) { 
      // Perform action on click 
      if(mp.isPlaying()) 
       { 
       mp.stop(); 
       mp.reset(); 
       mp.release(); 
       } 
       mp = MediaPlayer.create(getApplicationContext(), R.raw.clicker); 
       mp.start(); 

這將檢查mediaplayer是否已經播放。如果它已經播放它將停止並釋放它,然後初始化該mediaplayer(mp)對象並啓動媒體播放器。

如果不打就會if語句後執行的代碼和initialzing的MediaPlayer對象(在這種情況下MP)

要了解更多關於MediaPlayer的研究這個http://developer.android.com/reference/android/media/MediaPlayer.html後啓動媒體播放器。研究Mediaplayer的生命週期

0

爲什麼使用MediaPlayer時,SoundPool更適合小音頻文件?作爲一個基地,你可以使用這個:

this.setVolumeControlStream(AudioManager.STREAM_MUSIC); 


soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 70); 

final HashMap<Integer, Integer> soundPoolMap = new HashMap<Integer, Integer>(); 

final int soundID = 4; 
soundPoolMap.put(soundID, soundPool.load(this, R.raw.wav_sound, 4)); 

soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() 
{ 
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) 
    { 
     if (sampleId == 4) 
     { 
      soundPool.play(4, 50, 50, 1, 0, 1f);         
     } 
    } 
});