使用 MediaPlayer 同时播放多个音频文件时产生延迟
creating delay while playing multiple Audio files simultaneously using MediaPlayer
这里存在数量惊人的类似问题,遗憾的是 none 确实帮助了我。
我想同时播放 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();
}
现在,我的问题是如何为一个或多个音频文件添加延迟,如果我想在再次循环之前为 voicePlayer
添加 5000
的延迟?
Now, my query is how do I add a delay to one ore more Audio files, Say If I want to add a delay of 5000 for voicePlayer
before it loops again?
您可以删除 setLooping
并使用 OnCompletionListener
instead. When you get the onCompletion
callback, use postDelayed
到 post 再次启动播放器的 Runnable
。
这里存在数量惊人的类似问题,遗憾的是 none 确实帮助了我。
我想同时播放 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();
}
现在,我的问题是如何为一个或多个音频文件添加延迟,如果我想在再次循环之前为 voicePlayer
添加 5000
的延迟?
Now, my query is how do I add a delay to one ore more Audio files, Say If I want to add a delay of 5000 for
voicePlayer
before it loops again?
您可以删除 setLooping
并使用 OnCompletionListener
instead. When you get the onCompletion
callback, use postDelayed
到 post 再次启动播放器的 Runnable
。