我正在使用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
的正确方法是什么?
最佳答案
很有可能write
返回的传输计数很短。根据documentation
...if the track is stopped or paused on entry... then the write may return a short transfer count.
您的代码无法解决这种情况,因此很可能只是丢弃了整个缓冲区的音频。
一个简单的解决方案可能是在
write
之后立即尝试第二个play()
,但是仅在第一个write
返回短计数的情况下。第二个write
将需要准确说明第一个write
期间未写入的字节。
关于android - 如何正确暂停AudioTrack并恢复平稳播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921972/