0

次のような 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 秒の遅延で再生したいと思います。どうすればそれを達成できるのでしょうか?良いアイデアをお寄せいただきありがとうございます。

4

1 に答える 1

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;

明らかに、メモリに関しては、あまり最適ではなく、大幅な遅延が必要な場合は貪欲になる可能性があります。

于 2013-01-03T16:42:54.227 に答える