2014-11-26 4 views
0

오디오 트랙을 사용하여 사운드를 재생하고 있습니다. 오디오 트랙을 이와 같이 초기화하고 있습니다.오디오 트랙에서 오디오 트랙을 재생 한 후 사운드가 계속 재생됩니다.

numSamples = duration * sampleRate; 
sample = new double[numSamples]; 
generatedSnd = new byte[2 * numSamples]; 
length_snd = generatedSnd.length; 
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, 
       AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, 
       length_snd, AudioTrack.MODE_STATIC); 

그런 다음 소리를 생성합니다.

for (int i = 0; i < numSamples; ++i) { 
    freqOfTone = freqOfTone + 1; 
    sample[i] = Math.sin(2 * Math.PI * i/(sampleRate/freqOfTone)); 

    if(freqOfTone > 22500){ 
     freqOfTone = 10000; 
    }   
} 
int idx = 0; 
for (final double dVal : sample) { 
    // scale to maximum amplitude 
    final short val = (short) ((dVal * 32767)); 
    // in 16 bit wav PCM, first byte is the low order byte 
    generatedSnd[idx++] = (byte) (val & 0x00ff); 
    generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8); 
} 

이제 내가 좋아하는 사운드를 재생하고 있습니다 :

audioTrack.write(generatedSnd, 0, generatedSnd.length); 
audioTrack.play(); 

그리고 길과 같은 트랙을 중지 : 나는 과정을 (재생을하고있는 경우

audioTrack.release(); 
audioTrack.flush(); 
System.out.println("!!running"+audioTrack.getPlayState()); 
audioTrack = null; 

지금 문제가 중지된다) 트랙이 release 된 후에도 오디오가 계속 재생되고 있습니다. 릴리스 시점에 1을 표시하고 있지만 오디오는 여전히 재생중인 재생 상태를 확인했습니다.

감사의 말 전진.

답변

0

다음 코드는 작동합니다.

audioTrack.stop(); 
audioTrack.flush(); 
audioTrack.release(); 
audioTrack = null;