在 Android 之前播放的音频停止后播放音轨

Play audiotrack after stop previously audio played before Android

这是一个播放音轨的函数。

调用该函数的主要代码:

play(a);
play(b);

播放函数为:

public void play(byte[] audioData) {
        try {
                audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                        getSampleRate(),
                        getChannelCount(),
                        getAudioFormat(),
                        audioData.length,
                        AudioTrack.MODE_STATIC);


            audioTrack.play();
            audioTrack.write(audioData, 0, audioData.length);   


        } catch (Throwable t) {
            Log.e("AudioTrack", "Playback Failed");
        }
    }

但此应用同时播放两个音频数据

|----a----|
|--b--|

我想在a[]之后播放b[],像这样:

|----a----||--b--|

我该如何解决这个问题?

您需要检测音频A的音轨播放结束,为此您需要先获取音频A的音频长度,并设置音轨通知标记如下

audioTrack.setNotificationMarkerPosition(audioLength);

然后实现播放位置更新监听,到达标记后就可以开始播放音频B了,如下所示

audioTrack.setPlaybackPositionUpdateListener(new OnPlaybackPositionUpdateListener() {
     @Override
     public void onPeriodicNotification(AudioTrack track) {
               // nothing to do
     }
     @Override
     public void onMarkerReached(AudioTrack track) {
              // play the audio B here 
     } 
});