2014-02-14 83 views
1

我想用多個按鈕編寫Android Soundboard。每個按鈕應播放不同的聲音。Android Soundboard一次只有一個聲音

我對每個按鈕一個OnClickListener:

buttonAlan.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      playSound("alan"); 
     } 
    }); 

每個按鈕被調用以下函數。

private void playSound(String sound) { 

    int path = getResources().getIdentifier(sound, "raw", getPackageName()); 
    mediaplayer = MediaPlayer.create(this, path); 


    try { 
     mediaplayer.prepare(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    mediaplayer.start(); 
} 

音板的工作,但每次你點擊一個按鈕,它會一遍又一遍播放聲音。我需要媒體播放器停止播放,但每次我寫mediaplayer.stop()之類的東西時,該應用程序根本無法工作。 任何建議我應該改變我的功能/代碼?

回答

1

我用soundpool解決了它,在那裏你也可以同時播放多個聲音。 我第一次初始化和負載的聲音,我需要在構造函數中

SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 
int gameOverSound = soundPool.load(context, R.raw.gameover, 1); 

,然後你可以這樣玩:

public void playSound(int soundId) { 
     soundPool.play(soundId, 1.0f, 1.0f, 0, 0, 1); 
} 

編輯: 關於你要調用停止(在媒體播放器)和在開始播放另一個聲音之前釋放()。 你也可以設置

mPlayer.setLooping(false); 
+0

你能告訴我什麼是「背景」嗎?它是否與我的MainActivity的名稱有關? – Stef

+1

只是說:[什麼是上下文](http://stackoverflow.com/questions/3572463/what-is-context-in-android) 。如果你在一個活動內,你可以使用「this」或「getContext()」作爲上下文,如果將它移動到其他類中,則必須傳遞調用活動的上下文(這對於例如有權訪問資源是必需的) – stamanuel

+0

非常感謝!那就是訣竅。現在,只要按下按鈕,我就必須停止播放聲音池。 – Stef