2017-09-02 60 views
0

我想創建延遲聽覺反饋(DAF)等回聲。我試圖使用睡眠或改變採樣率,但它並沒有幫助我。 距離here如何在audioRecord和audioTrack之間創建延遲

private void init() 
{ 
    int min = AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); 
    record = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, 8000, AudioFormat.CHANNEL_IN_MONO, 
    AudioFormat.ENCODING_PCM_16BIT, min); 

    int maxJitter = AudioTrack.getMinBufferSize(9000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT); 
    track = new AudioTrack(AudioManager.MODE_IN_COMMUNICATION, 9000, AudioFormat.CHANNEL_OUT_MONO, 
    AudioFormat.ENCODING_PCM_16BIT, maxJitter, AudioTrack.MODE_STREAM); 
} 

private void recordAndPlay() 
{ 
    short[] lin = new short[1024]; 
    int num = 0; 
    am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 
    am.setMode(AudioManager.MODE_IN_COMMUNICATION); 
    record.startRecording(); 
    track.play(); 
    while (true) { 
     num = record.read(lin, 0, 1024); 
     track.write(lin, 0, num); 
    } 
} 
+0

可以使用處理程序,並把** recordAndPlay()**在run()方法 –

+0

方法你能不能給我舉例來說,好嗎? 。 – Alex

+0

'新的處理程序()postDelayed(新的Runnable(){ @覆蓋 公共無效的run(){recordAndPlay();} } ,5000);' –

回答

0

代碼,你可以使用hander

new Handler().postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       // after three seconds this code will execute 
       // do your work here 

       recordAndPlay(); 
      } 
     }, 3000);// time in milliseconds 3000 means 3 seconds(1000 = 1 second) 

該類audioRecord和audioTrack

之間的延遲進口 import android.os.Handler;

+0

您能否告訴我將此代碼添加到我的代碼的位置? – Alex

+0

你想要延遲哪個任務 –

+0

record.startRecording();睡眠(60); track.play(); – Alex

0

嘗試更換您的recordAndPlay()方法使用下面的代碼

private void recordAndPlay() { 
    short[] lin = new short[1024]; 
    int num = 0; 
    am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 
    am.setMode(AudioManager.MODE_IN_COMMUNICATION); 
    record.startRecording(); 

    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      track.play(); 
     } 
    }, 5000); 
    while (true) { 
     num = record.read(lin, 0, 1024); 
     track.write(lin, 0, num); 
    } 
}