【发布时间】:2017-05-15 22:48:07
【问题描述】:
我目前在流模式下使用 AudioTrack 来播放一些预先录制的曲目。播放和停止机制正常工作。但是,当我点击暂停并尝试恢复之后,缓冲区仅读取 -1,表示已达到 EOF。
我尝试标记和重置输入流,就像某些帖子中建议的那样,但没有帮助。
public void pauseTrack() {
currentAudioTrack.pause();
isPaused = true;
}
public void resumeTrack() {
isPaused = false;
}
@Override public void run() {
try {
while (offset < audioFile.length()) {
if (isPaused)
continue;
currentAudioTrack.play();
int numberOfBytesRead = fileInputStream.read(audioData);
if (numberOfBytesRead != -1) {
currentAudioTrack.write(audioData, 0, numberOfBytesRead);
offset+=numberOfBytesRead;
}
else {
return;
}
}
Log.v("status", "finished reading");
} catch (IOException io) {
Log.v("Exception", "IOException found: " + io.getLocalizedMessage());
} catch (IllegalStateException ie) {
Log.v("Exception","IllegalStateException:" + ie.getLocalizedMessage());
}
}
我做错了什么?
【问题讨论】:
-
你试过InputStream的skip方法吗? docs.oracle.com/javase/6/docs/api/java/io/… 可以跳到
numberOfBytesRead的位置 -
尽管 skip 方法正确转发 InputStream,但音轨不播放任何声音。