在交叉淡入淡出期间,MediaPlayer 播放器在某些设备上暂停一段时间,主要是在 Oreo 和 Pie 上
During crossfading MediaPlayer player pauses for while on some devices mostly on Oreo and Pie
我想要在一首歌曲即将结束时产生交叉渐变效果,而其他 starts.I 已使用以下代码在音频之间进行交叉渐变,它在大多数设备上都能正常工作,但在某些三星设备上无法正常工作运行 在奥利奥和一加 6 上。当第二个媒体播放器开始播放下一首歌曲时,他们的停顿非常小。提前致谢。
private void crossFade() {
fadeOut(musicPlayer, CROSSFADE_DURATION);
fadeIn(musicPlayer2, CROSSFADE_DURATION);
}
public void fadeOut(final MediaPlayer _player, final int duration) {
final float deviceVolume = getDeviceVolume();
final Handler h = new Handler();
h.postDelayed(new Runnable() {
private float time = duration;
private float volume = 0.0f;
@Override
public void run() {
// can call h again after work!
time -= 100;
volume = (deviceVolume * time) / duration;
_player.setVolume(volume, volume);
if (time > 0)
h.postDelayed(this, 100);
else {
_player.stop();
_player.release();
}
}
}, 100); // delay (takes millis)
}
public void fadeIn(final MediaPlayer _player, final int duration) {
final float deviceVolume = getDeviceVolume();
final Handler h = new Handler();
h.postDelayed(new Runnable() {
private float time = 0.0f;
private float volume = 0.0f;
@Override
public void run() {
if (!_player.isPlaying())
_player.start();
// can call h again after work!
time += 100;
volume = (deviceVolume * time) / duration;
_player.setVolume(volume, volume);
if (time < duration)
h.postDelayed(this, 100);
}
}, 100); // delay (takes millis)
}
最后我自己解决了这个问题。实际上 MediaPlayer 有这个问题,很久以前就被报告给 google 但仍然没有解决 (https://issuetracker.google.com/issues/36931073) 所以我们对此无能为力。所以我用Exoplayer来播放音频,非常流畅,没有任何停顿。
我想要在一首歌曲即将结束时产生交叉渐变效果,而其他 starts.I 已使用以下代码在音频之间进行交叉渐变,它在大多数设备上都能正常工作,但在某些三星设备上无法正常工作运行 在奥利奥和一加 6 上。当第二个媒体播放器开始播放下一首歌曲时,他们的停顿非常小。提前致谢。
private void crossFade() {
fadeOut(musicPlayer, CROSSFADE_DURATION);
fadeIn(musicPlayer2, CROSSFADE_DURATION);
}
public void fadeOut(final MediaPlayer _player, final int duration) {
final float deviceVolume = getDeviceVolume();
final Handler h = new Handler();
h.postDelayed(new Runnable() {
private float time = duration;
private float volume = 0.0f;
@Override
public void run() {
// can call h again after work!
time -= 100;
volume = (deviceVolume * time) / duration;
_player.setVolume(volume, volume);
if (time > 0)
h.postDelayed(this, 100);
else {
_player.stop();
_player.release();
}
}
}, 100); // delay (takes millis)
}
public void fadeIn(final MediaPlayer _player, final int duration) {
final float deviceVolume = getDeviceVolume();
final Handler h = new Handler();
h.postDelayed(new Runnable() {
private float time = 0.0f;
private float volume = 0.0f;
@Override
public void run() {
if (!_player.isPlaying())
_player.start();
// can call h again after work!
time += 100;
volume = (deviceVolume * time) / duration;
_player.setVolume(volume, volume);
if (time < duration)
h.postDelayed(this, 100);
}
}, 100); // delay (takes millis)
}
最后我自己解决了这个问题。实际上 MediaPlayer 有这个问题,很久以前就被报告给 google 但仍然没有解决 (https://issuetracker.google.com/issues/36931073) 所以我们对此无能为力。所以我用Exoplayer来播放音频,非常流畅,没有任何停顿。