2012-11-29 3 views
0

내가 가진 지연 안드로이드 AudioTrack 같은 :안드로이드 : 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(); 

나는 그것을 채우기 : 나는 2- 재생이 트랙을하고 싶은

mAudioTrack.write(buffer, 0, bufsize); 

두 번째 지연. 어떻게 내가 그걸 성취 할 수 있었는지 아는가? 좋은 아이디어에 미리 감사드립니다.

답변

0

다음은 누군가가 관심을 가질만한 경우 내 자신의 질문에 대한 답변입니다. 아이디어는 오디오 "대기 시간"을 생성하고 저장하는 임시 버퍼를 만드는 것입니다.

첫째, 초기화 :

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; 

물론, 메모리 현명한, 그것은 매우 최적화되지 그리고 당신은 큰 지연을 원한다면 욕심 수 있습니다

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

그럼, 내가 채우기.