延迟播放多个mp3文件



我需要我的应用程序运行多个mp3的方法。每个mp3都必须在上一个mp3之后播放。我创建了播放声音的方法

void PlaySentence(String path){
    try {            
        AssetFileDescriptor afd = getAssets().openFd(path);
        player = new MediaPlayer();
        player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        player.prepare();
        player.start();
    }
    catch (Exception ex)
    {
        if (BuildConfig.DEBUG)
            Log.d(TAGName, ex.getMessage());
    }
}

然后我在OnCreate中调用该函数。我使用while循环播放所有mp3文件。但声音相互混杂。如果我使用循环和isPlaying方法,应用程序没有响应。

while (currentMp3<totalMp3) {
if (!player.isPlaying()) {
            PlaySentence();
        }
}

我也使用下面的方法来避免混合声音。它适用于一个mp3

player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                    PlaySentence();
                }
            });

最好的解决方案是什么?

您应该使用setOnCompletionListener,但将您的播放器声明为类成员,在onCreate中初始化它,并且不要为每个mp3创建新的播放器。PlaySentence应该是:

void PlaySentence(String path){
try {            
    AssetFileDescriptor afd = getAssets().openFd(path);
    player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
    player.prepare();
    player.start();
}
catch (Exception ex)
{
    if (BuildConfig.DEBUG)
        Log.d(TAGName, ex.getMessage());
}
}

最新更新