2013-07-02 2 views
0

무한 루프로 오디오 트랙의 길이를 변경하는 방법은 무엇입니까?무한 루프로 오디오 트랙의 길이를 변경하는 방법은 무엇입니까?

은 내가 audioTrack.play() 전에 다음 줄을 적용해야한다는 것을 이해 :

audioTrack.setLoopPoints (0, generatedSnd.length, -1); 

예를 들어, 내가 시간이 0.5 초, 따라서 "기간"변수 타입의 "INT"ISN 될 것입니다 원하는 유효하지 않습니다. 이렇게하려면 소리를 반복적으로 재생하고 타이머로 멈출 시간을 제어하고 싶습니다.

코드는 다음과 같습니다

private int duration = 1; // seconds 
    private int sampleRate = 44100; 
    private final int numSamples = duration * sampleRate; 
    private final double sample[] = new double[numSamples]; 
    private double freqOfTone = 261.626; // For example musical note C (Do) is 261.626Hz. 
    private final byte generatedSnd[] = new byte[2 * numSamples]; 

final Thread thread = new Thread(new Runnable() { 
        public void run() { 
         genTone(); 
         handler.post(new Runnable() { 

          public void run() { 
           playSound(); 
          } 
         }); 
        } 
       }); 
       thread.start(); 
      } 
     }); 


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

     // convert to 16 bit pcm sound array 
     // assumes the sample buffer is normalised. 
     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); 

     } 
    } 

    void playSound(){ 
     final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 
       sampleRate, AudioFormat.CHANNEL_OUT_MONO, 
       AudioFormat.ENCODING_PCM_16BIT, generatedSnd.length, 
       AudioTrack.MODE_STATIC); 
     audioTrack.write(generatedSnd, 0, generatedSnd.length); 
     audioTrack.play(); 
    } 

답변

0

내가 생각 audioTrack.write(generatedSnd, 0, generatedSnd.length); 0 동일한 모든 트랙 u는 할 수 있지만, 글고 후 사용 audioTrack.write(generatedSnd, edittext, generatedSnd.length); 다음 때 사용자 테이프 (20) 플레이어 >> 클릭 재생 전에 것이다 루프 (20)를 후 두 번째

+3

이다 : 나는/ – ephramd

+0

없었다 생각하는 사람 : / – H4F

0

이 사람은 나를 위해 일한 :

audioTrack.setLoopPoints (0, generatedSnd.length/FRAME_SIZE, -1);

12 (6 * 2), 또는 7.1 것이 있다면 당신이 다음 5.1 시스템 프레임 크기를 재생하는 경우 (16) (8 * 2), 스테레오 것이 아무 의미한다 4.