使用MediaPlayer同时播放多个音频文件时创建延迟

时间:2015-07-23 07:20:18

标签: android audio android-mediaplayer

这里存在大量类似问题,遗憾的是没有人帮助过我。

我正在尝试同时播放3个音频文件,一个是.wav,另一个是.3gp,另一个是.mp3。由于大小超过1MB,我无法在此处使用Android SoundPool。到目前为止,一切运行良好,没有任何错误。这是我的代码:

MediaPlayer mp = new MediaPlayer();
MediaPlayer songPlayer = new MediaPlayer();
MediaPlayer voicePlayer = new MediaPlayer();
private String song,voice,text;

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



    SharedPreferences preferences1 = getSharedPreferences("musicList", MODE_PRIVATE);

    song = preferences1.getString("MUSICONE", "");


    SharedPreferences preferences2 = getSharedPreferences("recordList",MODE_PRIVATE);
    temp = preferences2.getString("VOICEONE","");
    voice = Environment.getExternalStorageDirectory()+"/myAppCache2/"+temp;


    SharedPreferences preferences3 = getSharedPreferences("TextList",MODE_PRIVATE);
    temp=preferences3.getString("ALARMONE","");
    text=Environment.getExternalStorageDirectory()+"/myAppCache/"+temp;


    try {
        mp.setDataSource(text);
        mp.prepare();
        mp.setLooping(true);

        songPlayer.setDataSource(song);
        songPlayer.prepare();
        songPlayer.setLooping(true);

        voicePlayer.setDataSource(voice);
        voicePlayer.prepare();
        voicePlayer.setLooping(true);



    }
    catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    mp.start();
    songPlayer.start();
    voicePlayer.start();
}

现在,我的查询是如何向一个或多个音频文件添加延迟,如果我想在5000之前为voicePlayer添加RewriteEngine On RewriteCond %{HTTP_HOST} ^.+?\.([^.]+\.domain\.com)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [L,R=301] 的延迟,请再次循环播放?

1 个答案:

答案 0 :(得分:0)

  

现在,我的查询是如何为一个或多个音频文件添加延迟,如果我想在voicePlayer再次循环之前为其添加5000的延迟?

您可以删除setLooping并使用OnCompletionListener代替。获得onCompletion回调后,请使用postDelayed发布再次启动播放器的Runnable