【问题标题】:How to set a delay on audio in android studio?如何在android studio中设置音频延迟?
【发布时间】:2017-06-13 13:12:19
【问题描述】:

我对这段代码的问题是我的所有音频文件同时播放。我正在尝试创建一个应用程序,该应用程序根据您在 EDITTEXT 中键入的内容播放计算出的歌曲。我需要一种方法将每个后续音符延迟一定的时间,以便它像一首歌曲一样播放......有没有办法在没有更多案例陈述的情况下做到这一点。

我的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;
                }

我想要一个功能,允许我在某个时间点延迟多个音频文件,这样它们就不会同时播放。谢谢!

【问题讨论】:

    标签: java android string audio delay


    【解决方案1】:

    使用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();
    

    【讨论】:

    • 不允许播放下一个音频。
    • 这允许 char "b" 播放。而且我希望系列中的下一个角色,无论它是什么,都可以在前一个角色之后进行准备和播放。
    • 我已经编辑了答案。此代码将在完成后一个接一个地播放多个音频。 P.S 一个多月后突然出现这个问题。
    猜你喜欢
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多