【发布时间】:2019-09-13 10:32:57
【问题描述】:
我正在使用 Android 的 AudioTrack 播放之前录制的 PCM 文件。如果我在播放时不暂停,一切都很好;但如果我暂停并继续,则会跳过一大段音频(大约 1 秒)。这是我的代码:
// Player thread
audioTrack = new AudioTrack(
AudioManager.STREAM_MUSIC,
RECORDER_SAMPLERATE,
AudioFormat.CHANNEL_OUT_MONO,
RECORDER_AUDIO_ENCODING,
bufferSize,
AudioTrack.MODE_STREAM);
audioTrack.play();
FileInputStream is = null;
try {
is = new FileInputStream(filePath);
} catch (FileNotFoundException e){
e.printStackTrace();
return;
}
byte[] buffer = new byte[bufferSize];
int offset = 0;
while (true) {
if(paused) { continue;}
int cnt = 0;
try {
cnt = is.read(buffer, 0, bufferSize);
} catch (IOException e){
e.printStackTrace();
}
if(cnt < 0) break;
audioTrack.write(buffer, 0, cnt);
audioTrack.play();
}
audioTrack.release();
这是暂停和恢复播放的代码:
public void pause(){
this.paused = true;
audioTrack.pause();
}
public void resume(){
this.paused = false;
}
出了什么问题? pause的正确做法是什么?
【问题讨论】:
-
你是在没有任何服务的情况下在主线程(Activity/Fragment 类)中调用
audioTrack.play();吗? -
我建议将音轨播放代码包装在后台线程的服务类中。然后,您可以在广播接收器的帮助下实现播放/暂停功能。
-
不,第一部分代码被包装在一个单独的线程中。
标签: android audio audiotrack