2017-08-14 79 views
0

我已經創建了一個按鈕,當按下按鈕進入音符數組並隨機選擇一個按鈕時,我不知道該怎麼做的是有一個按鈕來重放隨機音符每當按下時。我正在考慮使用rSound整數,但由於它是在一個私人空間,我不能使用它..我應該怎麼做呢?在Android Studio中重複播放隨機音符

代碼:

package com.stefanawesome.piano; 

import android.content.pm.ActivityInfo; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.media.SoundPool; 
import android.os.Build; 
import android.provider.ContactsContract; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.Random; 


public class MainActivity extends AppCompatActivity { 

    //Declaring variables and array: 
    ImageButton NoteNew; 
    ImageButton Repeat; 
    Button c, d, e, f, g, a, b, high; 
    List<Integer> soundList = new ArrayList<Integer>(); 
    private SoundPool soundpool; 
    private int sound_c, sound_d, sound_e, sound_f, sound_g, sound_a, sound_b, sound_high; 

    //Random Note Function: 
    private void playRandomSound() { 
     int randomInt = (new Random().nextInt(soundList.size())); 
     int rSound = soundList.get(randomInt); 
     MediaPlayer mp = MediaPlayer.create(this, rSound); 
     mp.start(); 
    } 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

     //Find View by ID all here: 
     soundList.add(R.raw.c); 
     soundList.add(R.raw.d); 
     soundList.add(R.raw.e); 
     soundList.add(R.raw.f); 
     soundList.add(R.raw.g); 
     soundList.add(R.raw.a); 
     soundList.add(R.raw.b); 
     soundList.add(R.raw.chigh); 
     NoteNew = (ImageButton) findViewById(R.id.Newnote); 
     Repeat = (ImageButton) findViewById(R.id.Repeat); 
     c = (Button) findViewById(R.id.C); 
     d = (Button) findViewById(R.id.D); 
     e = (Button) findViewById(R.id.E); 
     f = (Button) findViewById(R.id.F); 
     g = (Button) findViewById(R.id.G); 
     a = (Button) findViewById(R.id.A); 
     b = (Button) findViewById(R.id.B); 
     high = (Button) findViewById(R.id.high); 


     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      soundpool = new SoundPool.Builder().setMaxStreams(5).build(); 
     } else { 
      soundpool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); 

     } 

     //Soundpools over here: 
     sound_c = soundpool.load(this, R.raw.c, 1); 
     sound_d = soundpool.load(this, R.raw.d, 1); 
     sound_e = soundpool.load(this, R.raw.e, 1); 
     sound_f = soundpool.load(this, R.raw.f, 1); 
     sound_g = soundpool.load(this, R.raw.g, 1); 
     sound_a = soundpool.load(this, R.raw.a, 1); 
     sound_b = soundpool.load(this, R.raw.b, 1); 
     sound_high = soundpool.load(this, R.raw.chigh, 1); 


     //When button gets clicked do something: 
     c.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       soundpool.play(sound_c, 1, 1, 0, 0, 1); 
      } 
     }); 

     d.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       soundpool.play(sound_d, 1, 1, 0, 0, 1); 
      } 
     }); 

     e.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       soundpool.play(sound_e, 1, 1, 0, 0, 1); 
      } 
     }); 

     f.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       soundpool.play(sound_f, 1, 1, 0, 0, 1); 
      } 
     }); 

     g.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       soundpool.play(sound_g, 1, 1, 0, 0, 1); 
      } 
     }); 

     a.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       soundpool.play(sound_a, 1, 1, 0, 0, 1); 
      } 
     }); 

     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       soundpool.play(sound_b, 1, 1, 0, 0, 1); 
      } 
     }); 

     high.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       soundpool.play(sound_high, 1, 1, 0, 0, 1); 
      } 
     }); 
     NoteNew.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       playRandomSound(); 
      } 
     }); 


    } 
} 
+0

「重播,只要按下隨機筆記」所以,你要的第一次點擊是一個隨機音符,但將該音符分配給該按鈕以備將來的所有點擊? –

回答

1

只需保存隨機整數(其中s隨機音符的指數)在其他一些變量。
然後,使用該變量重放上一個隨機音符。

更新你的函數

int last; 

    private void playRandomSound() { 
      int randomInt = (new Random().nextInt(soundList.size())); 
      last=randomInt; 
      int rSound = soundList.get(randomInt); 
      MediaPlayer mp = MediaPlayer.create(this, rSound); 
      mp.start(); 
     } 

並添加此新功能(與新按鈕稱呼它)

private void playlastRandomSound() { 
     int rSound = soundList.get(last); 
     MediaPlayer mp = MediaPlayer.create(this, rSound); 
     mp.start(); 
    }