2013-07-02 21 views
0

如何通過無限循環更改錄音筆的持續時間?如何通過無限循環更改錄音筆的持續時間?

我知道必須audioTrack.play()之前應用下面的行:

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

例如,我想的持續時間將是半秒,因此,「持續時間」變量類型是「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可以,但EditText上,然後使用: 那麼當用戶前扣帶20點擊播放>>玩家將套環20後audioTrack.write(generatedSnd, edittext, generatedSnd.length); 第二

+3

即是沒有意義:/ – ephramd

+0

我思考的人:/ – H4F

0

這一個爲我工作:

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

如果你在隨後5.1系統幀大小播放如果12(6×2),或爲7.1它是16(8×2),對於立體聲它4.