2013-08-05 1 views
1

나는 PCM을 생성하고 소리를 반복하고 싶습니다. 내가 문서를 따르지만, 여기 android AudioTrack setloop 값이 잘못되었습니다.

08-05 15:46:26.675: E/AudioTrack(27686): setLoop invalid value: loopStart 0, loopEnd 44100, loopCount -1, framecount 11025, user 11025 

내 코드입니다 이클립스 나를 계속 얘기 :

void genTone() { 
    // fill out the array 
    for (int i = 1; i < numSamples - 1; i = i + 2) { 
     sample[i] = Math.sin(2 * Math.PI * i/(sampleRate/-300)); 
    } 

    // convert to 16 bit pcm sound array 
    // assumes the sample buffer is normalised. 
    int idx = 0; 
    for (double dVal : sample) { 
     short val = (short) (dVal * 32767); 
     generatedSnd[idx++] = (byte) (val & 0x00ff); 
     generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8); 
    } 

    //write it to audio Track. 
    audioTrack.write(generatedSnd, 0, numSamples); 
    audioTrack.setLoopPoints(0, numSamples, -1); 
    //from 0.0 ~ 1.0 
    audioTrack.setStereoVolume((float)0.5, (float)1); //change amplitude 
} 



public void buttonPlay(View v) { 
    audioTrack.reloadStaticData(); 
    audioTrack.play(); 
} 

는 ~~

+0

죄송합니다. 방금 방금 위대한 소식을 찾았습니다 =. = http://bin-liu.blogspot.dk/2011/12/looping-audio-file-via-audiotrack.html numSamples를 몇 번 나누면 작업이 시작됩니다. . :피 – vegligi

답변

2

the documentation에서 도와주세요 "endInFrames 루프 끝 마커 표현 프레임 "

로그 인쇄는 트랙 콘 엔드 마커로 지정하려는 44100보다 작은 11025 프레임을 사용합니다 (16 비트 스테레오 PCM 오디오의 경우 프레임 크기는 4 바이트입니다).

주목할 가치가있는 또 다른 사항은 "위치를 변경하려면 트랙을 정지하거나 일시 중지해야합니다"입니다.