【问题标题】:Android MediaPlayer synchronized startAndroid MediaPlayer同步启动
【发布时间】:2022-12-05 03:57:03
【问题描述】:
我正在尝试使用 Android 的 MediaPlayer 播放音乐游戏的背景音轨,该音轨应与其他事件保持同步。
但是,我发现在不同的设备上背景音轨似乎不同步。
经过一番挫折后,我得出结论,开始播放音频所需的时间是不确定的。
有没有解决的办法?或者来自表示“现在开始播放”的 MediaPlayer 的某种回调?
AFAICT 由于音频文件太长,我无法将 SoundPool 用于此背景音轨。
【问题讨论】:
标签:
android
android-mediaplayer
android-audio
【解决方案1】:
确保音频与其他事件保持同步的一种方法是使用 MediaPlayer 的 setOnPreparedListener 方法,该方法在 MediaPlayer 准备好播放音频时调用。您可以使用此回调在所需时间开始播放音频,这应有助于确保它与其他事件保持同步。
下面是一个示例,说明如何使用 setOnPreparedListener 方法在所需时间开始播放音频:
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// Start playing the audio at the desired time
mp.start();
}
});
mediaPlayer.setDataSource(...);
mediaPlayer.prepareAsync();
另一种选择是使用 MediaPlayer.getCurrentPosition 方法定期检查音频的当前位置并相应地调整其他事件的时间。这可以使用 Timer 或 Handler 定期检查音频的当前位置并调整其他事件的时间来完成。
下面是一个示例,说明如何使用 MediaPlayer.getCurrentPosition 方法来确保音频与其他事件保持同步:
// Create a Timer or Handler to periodically check the current position of the audio
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
// Check the current position of the audio
int currentPosition = mediaPlayer.getCurrentPosition();
Copy code
// Adjust the timing of other events based on the current position of the audio
...
}
}, 0, 100); // Check the current position every 100 milliseconds