2012-11-29 54 views
0

我有Android 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-進行播放第二次延遲。任何想法我怎麼能實現呢?預先感謝任何好主意。

回答

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; 

顯然,內存明智的,它不是很優化,如果你想有一個大的延遲可能是貪婪。