簡體   English   中英

Android:如何根據所按下的按鈕播放聲音?

[英]Android : How to play a sound depending on the button that is pressed?

我是Android的新手,我想根據用戶按下的按鈕來播放聲音。

我設法在按下按鈕時播放了聲音,但必須指定要播放的文件。

我想做的是找到一種動態設置R.raw.arthaswhat5參數的方法,以便將其設置為最后按下的按鈕。

public void listen(View w){
    MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.arthaswhat5);
    mediaPlayer.start();
}

我認為以與文件相同的方式命名按鈕可能會有所幫助,但我不太了解R的工作原理...我知道我可以將v.getId()整數知道按下哪個按鈕,但是我可以請勿使用此ID相應地播放聲音...

您要使用聲音池http://developer.android.com/reference/android/media/SoundPool.html

在“ res”文件夾中,添加一個名為“ raw”的文件夾,然后將您的聲音文件放入其中。 我使用了.m4a文件,它對我有用,但是我不確定是否支持其他格式。

這是我在應用程序中使用的代碼的片段,使用以下代碼播放聲音:

int flip = 1,scratch = 2,wrong = 3,correct = 4,pop = 5;
SoundPool soundPool;
HashMap<Integer, Integer> soundPoolMap;

setVolumeControlStream(AudioManager.STREAM_MUSIC);

soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 100);
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(flip, soundPool.load(this, R.raw.flip, 1));
soundPoolMap.put(scratch, soundPool.load(this, R.raw.scratch, 1));
soundPoolMap.put(wrong, soundPool.load(this, R.raw.wrong, 1));
soundPoolMap.put(correct, soundPool.load(this, R.raw.correct, 1));
soundPoolMap.put(pop, soundPool.load(this, R.raw.pop, 1));

soundPool.play(soundPoolMap.get(flip), 1, 1, 1, 0, 1);

編輯:幾乎完全忽略了您的問題的一部分。 您需要使用開關/案例范圍來確定單擊了哪個按鈕,並對其應用正確的聲音:

public void listen(View v) {
   switch(v.getId()) {
      case (R.id.button1):
         soundPool.play(soundPoolMap.get(flip), 1, 1, 1, 0, 1);
         break;
      case (R.id.button2):
         soundPool.play(soundPoolMap.get(scratch), 1, 1, 1, 0, 1);
         break;
      case (R.id.button3):
         ...
   }
}

R.rawR.id一樣,是指向這些值存儲位置的指針之類的基本單詞。

當您將某些圖像或wav文件保存在raw文件夾下時,在刷新項目后,您可以像R.raw.arthaswhat5這樣調用它,它返回int

同樣,添加新的GUI元素時會生成R.id

R.rawR.id之間沒有依賴關系。 R.raw指向原始文件夾時R.id指向您的視圖XML。

from `View` you can fetch id to you it for `if` statement or `switch`

喜歡

if (v.getId() == R.id.your_button){ /*...*/}  

[編輯]

如果您有超過100首歌曲,我會使用assets文件夾而不是raw 因為raw名稱中的所有名稱都必須小寫,並且您不能在此處創建子目錄。 將很難處理和維護。

您為什么不使用這樣的switch-case語句?

public void listen(View v){
   MediaPlayer mediaPlayer;
   switch(v.getid()) {
      case (R.id.sound1):
         mediaPlayer = MediaPlayer.create(this, R.raw.arthaswhat5);
         mediaPlayer.start();
         break;
      case (R.id.sound2):
         mediaPlayer = MediaPlayer.create(this, R.raw.arthaswhat6);
         mediaPlayer.start();
         break;
      case (R.id.sound3):
         ...
         ...
         ...
      case (...)
         ...
         ...
         ...
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM