在 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
}
});
这是一个播放音轨的函数。
调用该函数的主要代码:
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
}
});