簡體   English   中英

Android-每秒點擊一次即可播放不同的聲音

[英]Android - play different sound on ever second click

如果我想在用戶單擊按鈕時播放聲音,則為:

Button one = (Button) this.findViewById(R.id.button1);
final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);     

one.setOnClickListener(new OnClickListener(){ 
    public void onClick(View v){ 
    mp.start(); }
    });

但是,當我有2種聲音並且想要每秒鍾單擊一次播放不同的聲音時該怎么辦?

int iClicked = 0;
public void onClick(View v) 
{ 
    iClicked++;
    if(iClicked % 2==0){
       // Do sth, e.g. play sound I
    }
    else { // Do sth else, e.g. play sound II
    }
}

嘗試這個

    private int rId=0;//class member
    //onclick
    final int [] music={R.raw.soho,R.raw.other};
    int id=music.length%2;
    final MediaPlayer mp = MediaPlayer.create(this, rId);
    id++;

我想每秒鍾單擊一次播放不同的聲音嗎?

為了這 :

1.將所有原始文件ID存儲在Integer Array中,例如:

int arrRawFiles ={R.raw.soho,R.raw.soho2,R.raw.soho3}

2. on Button的onClick根據數組長度生成一個隨機整數,然后使用該數字從數組獲取原始文件ID:

  public void onClick(View v) 
   { 
     int index = new Random().nextInt(arrRawFiles.length);
     MediaPlayer mp = MediaPlayer.create(this,index);
     mp.start(); 
   }
MediaPlayer mp;    
int clickCount=0;
one.setOnClickListener(new OnClickListener(){ 
public void onClick(View v) 
{ 
 if(clickCount %2 ==0){
    mp = MediaPlayer.create(this, R.raw.soho);
 }
 else{
    mp = MediaPlayer.create(this, R.raw.another);
 }
 mp.start();
 clickCount++;
} });

這很簡單。 查看示例代碼並嘗試...

        final boolean isFirstSound = true;
        Button one = (Button) this.findViewById(R.id.button1);
        final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);
        final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.second_sound);
        one.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                isFirstSound = !isFirstSound;
                if(isFirstSound)
                    mp.start();
                else
                    mp2.start();
            }
        });

您可以將對音頻剪輯的引用放入數組中

int[] audio={R.raw.clip1,R.raw.clip2};
for(i=0;i<audio.length;i++){

//your MediaPlayer Code here

}

我沒有嘗試過,但是您會發現如何播放許多剪輯的想法。 祝好運

public class ButtonPlayer implements View.OnClickListener {
    private final int[] sounds;
    private int soundIndex = -1;

    public ButtonPlayer(int... sounds) {
        this.sounds = sounds;
    }

    @Override
    public void onClick(View view) {
        if (sounds.length != 0) {
            soundIndex++;
            soundIndex = soundIndex % sounds.length;
            MediaPlayer mp = MediaPlayer.create(this, sounds[soundIndex]);
            mp.start();
        }
    }
}

然后在代碼中的某處:

Button one = (Button) this.findViewById(R.id.button1);
one.setOnClickListener(new ButtonPlayer(
                           R.raw.first_composition,
                           R.raw.second_composition));

您可以稍后通過為構造函數中的每種聲音生成“ n”個媒體播放器來優化此類。 但這是優化的任務,而不是實現的任務。

當然,總是嘗試為小功能創建獨立的類。 不要弄亂活動。

    int count=0;
    Button one = (Button) this.findViewById(R.id.button1);
    final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);

    one.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v)
        {
            count++;

            if(count%2==1) {
                //play first sound
            }else{
                //play second sound
            }

        } });

嘗試像

boolean playFirst = true;
 final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);
        final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.second_sound_soho);
buttonClick.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        if(playFirst == true){
             mp.start(); 
            playFirst = false;
        }else{
             mp2.start(); 
            playFirst = true;
        }

    }
});

如果您只想在2種聲音之間切換,我認為您不需要第一次檢查布爾值或int值只需檢查sound1是否正在播放->停止sound1並打開sound2即可

final MediaPlayer mp1 = MediaPlayer.create(this, R.raw.soho);
final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.second_sound);

buttonClick.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        if(mp1.isPlaying()){
             mp1.stop();
             mp2.start(); 
        }else{
             mp2.stop();
             mp1.start(); 
        }
    }
});

希望這個幫助

暫無
暫無

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

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