Android:延迟AudioTrack

时间:2012-11-29 05:22:33

标签: android audio audiotrack

我有一个Android AudioTrack,例如:

private AudioTrack mAudioTrack;
int min = AudioTrack.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT);
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, min, AudioTrack.MODE_STREAM);
mAudioTrack.play();

我填写:

mAudioTrack.write(buffer, 0, bufsize);

我想让这首曲目延迟2秒。知道如何实现这一目标吗?提前感谢任何好主意。

1 个答案:

答案 0 :(得分:0)

如果有人感兴趣的话,这是我自己的问题的答案。我们的想法是创建一个临时缓冲区,用于创建和存储音频“延迟”。

首先,初始化:

final int mSizeTable = 300;
private byte[][] mTableAudioBuffer = byte[mSizeTable][];
private int mCountAudioBuffer = 0;
...
mAudioTrack.play();

然后,我填写:

mTableAudioBuffer[mCountAudioBuffer] = buffer.clone();
int ret = 0;
if (mTableAudioBuffer[(mCountAudioBuffer + 1) % mSizeTable] != null)
    ret = mAudioTrack.write(mTableAudioBuffer[(mCountAudioBuffer + 1) % mSizeTable], 0, bufsize);
mCountAudioBuffer = (mCountAudioBuffer + 1) % mSizeTable;
return ret;

显然,在内存方面,它不是非常优化,如果你想要大的延迟,可能会贪婪。