2017-06-13 38 views
0

我这个代码的问题是我所有的音频文件都在同一时间播放。我试图创建一个应用程序,根据您在EDITTEXT中输入的内容播放计算出的歌曲。我需要一种方法来延迟每个后续音符一定的时间,以便它像歌曲一样播放......有没有办法做到这一点,而没有更多的病例陈述。如何在android studio中设置音频延迟?

我的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在音轨结束时收听事件。下一个音频文件将在此之后播放。一个例子

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

编辑

播放多种音频文件,一前一后,你不必嵌套onCompletionListener一前一后创建。你可以简单地创建一个你想播放的所有音频文件的数组,并设置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