以特定顺序在Android中播放声音

时间:2015-10-26 16:12:03

标签: android audio

在Android应用中,我使用MediaPlayer播放声音文件。

这仅供个人使用,不会发布。

我有几个声音文件的引用:

MediaPlayer dooropen = MediaPlayer.create(MainActivity.this, R.raw.dooropen);
MediaPlayer doorclose = MediaPlayer.create(MainActivity.this, R.raw.doorclose);
//...

例如,开门声音片段的长度是2秒,所以在播放之后我睡了2.5秒然后播放门关闭声音片段,就像这样

dooropen.start();
try{ Thread.sleep(2500); }catch(InterruptedException e){ }
doorclose.start();

我遇到的问题是我的一些声音文件没有按我订购的顺序播放。

似乎没有任何理由可以播放某些声音文件,因为如果我在我的onCreate()程序的顶部播放它们都会播放,只有当我尝试按特定顺序播放它们时才会播放它们

3 个答案:

答案 0 :(得分:2)

你应该实现媒体播放器的setOnCompletionListener()以在播放完成后获得回叫,然后加载另一个需要开始播放的音频文件。

有关媒体播放器状态,请参阅MediaPlayer Documentation

答案 1 :(得分:0)

是的,您可以将MediaPlayer与oncompletionListener一起使用,也可以在完成一个音频后尝试重置媒体播放器。示例代码在这里。您还可以使用会话ID来跟踪正在播放的文件以及从哪个文件开始。

    mPlayer = new MediaPlayer();
  //set other attributes here
    mPlayer.setAudioSessionId(1);
    mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            //check which audio session was playing and set new datasource and session
        mPlayer.reset();
       //set other data source here and different session id

        }
    });

希望它能解决你的问题。

答案 2 :(得分:0)

如果您想按顺序播放声音,请尝试以下操作:

        mp1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp2.start();
            }
        });
        mp2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp3.start();
            }
        });
        mp3.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp1.start();
            }
        });