我正在使用 JLayer 库来解码 MP3 文件(我需要访问音频样本)和 AudioTrack 对象来播放它的 Android 应用程序。我有这样的事情:
int timeMarker = 0;
int timeStep = 5000;
while (!isCancelled()) {
outSignalBuffer = decode(fileToPlay.getPath(), timeMarker, timeStep, bufferSize);
audioTrack.write(outSignalBuffer, 0, outSignalBuffer.length);
//publishProgress(outSignalBuffer);
timeMarker += timeStep;
}
此代码放置在我创建为 AsyncTask 的自定义播放器中。一般来说,我的解码和写入方法工作正常,因为我听到了声音文件。问题是,我的声音每 5 秒(timeStep = 5000 毫秒)有规律地跳动。正如我看到的 audioTrack.write(...) 阻止了我的异步任务,因此每次 Steps 之后的短暂暂停是由于等待解码方法的结果引起的。
您有什么建议可以正确传递 outSignalBuffer 以从解码器编写方法以获得流畅的 audioTrack 播放器吗?