【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      相关资源
      最近更新 更多