2017-06-13 4 views
0

このコードの問題は、すべてのオーディオファイルが同時に再生されることです。 EDITTEXTで入力したものに基づいて計算された曲を演奏するアプリケーションを作成しようとしています。私はそれが歌のように演奏するように、後続の音符を一定の時間量だけ遅らせる方法が必要です。もっと多くのcase文を使わなくてもこれを行う方法はありますか?アンドロイドスタジオでオーディオの遅延を設定するにはどうすればいいですか?

私のJavaコード:

public class MainActivity extends Activity { 


EditText edit; 
Button button; 

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

    edit = (EditText) findViewById(R.id.box); 
    button = (Button) findViewById(R.id.button); 

    button.setOnClickListener(new View.OnClickListener() { 


     @Override 
     public void onClick(View v) { 
      String string = edit.getText().toString(); 
      char arr[]=string.toCharArray(); 
      for(int i=0;i<arr.length;i++){ 
       switch (arr[i]) { 
        case 'a': 
         MediaPlayer mp = MediaPlayer.create(getApplicationContext(), sample); 
         mp.start(); 

         break; 
        case 'b': 
         MediaPlayer mp1 = MediaPlayer.create(getApplicationContext(), sample1); 
         mp1.start(); 

         break; 
        case 'c': 
         MediaPlayer mp2 = MediaPlayer.create(getApplicationContext(), sample2); 
         mp2.start(); 

         break; 
        case 'd': 
         MediaPlayer mp3 = MediaPlayer.create(getApplicationContext(), sample3); 
         mp3.start(); 

         break; 
        case 'e': 
         MediaPlayer mp4 = MediaPlayer.create(getApplicationContext(), sample4); 
         mp4.start(); 

         break; 
        case 'f': 
         MediaPlayer mp5 = MediaPlayer.create(getApplicationContext(), sample5); 
         mp5.start(); 

         break; 
        case 'g': 
         MediaPlayer mp6 = MediaPlayer.create(getApplicationContext(), sample6); 
         mp6.start(); 

         break; 
        case 'h': 
         MediaPlayer mp7 = MediaPlayer.create(getApplicationContext(), sample); 
         mp7.start(); 

         break; 
        case 'i': 
         MediaPlayer mp8 = MediaPlayer.create(getApplicationContext(), sample1); 
         mp8.start(); 

         break; 
        case 'j': 
         MediaPlayer mp9 = MediaPlayer.create(getApplicationContext(), sample2); 
         mp9.start(); 

         break; 
        case 'k': 
         MediaPlayer mp10 = MediaPlayer.create(getApplicationContext(), sample3); 
         mp10.start(); 

         break; 
        case 'l': 
         MediaPlayer mp11 = MediaPlayer.create(getApplicationContext(), sample4); 
         mp11.start(); 

         break; 
        case 'm': 
         MediaPlayer mp12 = MediaPlayer.create(getApplicationContext(), sample5); 
         mp12.start(); 

         break; 
        case 'n': 
         MediaPlayer mp13 = MediaPlayer.create(getApplicationContext(), sample6); 
         mp13.start(); 

         break; 
        case 'o': 
         MediaPlayer mp14 = MediaPlayer.create(getApplicationContext(), sample); 
         mp14.start(); 

         break; 
        case 'p': 
         MediaPlayer mp15 = MediaPlayer.create(getApplicationContext(), sample1); 
         mp15.start(); 

         break; 
        case 'q': 
         MediaPlayer mp16 = MediaPlayer.create(getApplicationContext(), sample2); 
         mp16.start(); 

         break; 
        case 'r': 
         MediaPlayer mp17 = MediaPlayer.create(getApplicationContext(), sample3); 
         mp17.start(); 

         break; 
        case 's': 
         MediaPlayer mp18 = MediaPlayer.create(getApplicationContext(), sample4); 
         mp18.start(); 

         break; 
        case 't': 
         MediaPlayer mp19 = MediaPlayer.create(getApplicationContext(), sample5); 
         mp19.start(); 

         break; 
        case 'u': 
         MediaPlayer mp20 = MediaPlayer.create(getApplicationContext(), sample6); 
         mp20.start(); 

         break; 
        case 'v': 
         MediaPlayer mp21 = MediaPlayer.create(getApplicationContext(), sample); 
         mp21.start(); 

         break; 
        case 'w': 
         MediaPlayer mp22 = MediaPlayer.create(getApplicationContext(), sample2); 
         mp22.start(); 

         break; 
        case 'x': 
         MediaPlayer mp23 = MediaPlayer.create(getApplicationContext(), sample3); 
         mp23.start(); 

         break; 
        case 'y': 
         MediaPlayer mp24 = MediaPlayer.create(getApplicationContext(), sample4); 
         mp24.start(); 

         break; 
        case 'z': 
         MediaPlayer mp25 = MediaPlayer.create(getApplicationContext(), sample5); 
         mp25.start(); 

         break; 
        case ' ': 
         MediaPlayer mp26 = MediaPlayer.create(getApplicationContext(), sample6); 
         mp26.start(); 

         break; 
       } 

私は、彼らが同時にプレーいけないように、私は、複数のオーディオファイルはすべて、ある時点で遅延持つことができるようになる機能が欲しいです。ありがとう!

答えて

0

MediaPlayer.onCompletionListenerを使用すると、トラックの終了時にイベントを聴くことができます。その後、次のオーディオファイルが再生されます。複数のオーディオファイルを1つずつ再生するに例

mp.prepare(); 
mp1.prepare(); 
mp.start(); 
mp.setNextMediaPlayer(mp1); 

EDIT

、あなたは他の後に、ネストされたonCompletionListener 1を作成する必要はありません。あなたは、再生し、onCompletionListenerを設定するすべてのオーディオファイルの配列を作成することができます。例:

int[] myAudio = {R.raw.audio1, R.raw.audio2, R.raw.audio3}; 
int mTrackFinish = 0; 
MediaPlayer mp = MediaPlayer.create(this, myAudio[0]); 
mp.setOnCompletionListener(new OnCompletionListener() 
{ 
@Override 
public void onCompletion(MediaPlayer mp) 
{ 
    mTrackFinish++; 
    mp.reset(); 
    if(mTrackFinish < myAudio.length) 
      // play some audio from list 
     else 
      mTrackFinish=0; 
      mp.release(); 
      mp = null; // either set counter to 0 and start again or call end of list 

    } 
}); 
mp.start(); 
+0

次のオーディオを再生できない。 –

+0

これは、文字 "b"を再生できるようにします。そして、シリーズの次のキャラクターは、それが何であるかにかかわらず、以前のものに続いて、準備され演奏されることが欲しい。 –

+0

答えを編集しました。このコードは、完成後に複数のオーディオを順番に再生します。 P.S問題が突然一ヶ月以上後にポップアップしたことを驚かせた。 – Abhi

関連する問題