2013-07-01 58 views
1

我試圖從麥克風錄下聲音然後回放,但我在這裏的所有內容都是點擊聲音。 AudioTrack和AudioRecord都處於相同的設置,並正確啓動。這裏是我的代碼:只是聽到咔嗒聲回放上的咔嗒聲

stop.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      isRecording = false; 
      recordingThread.join(); 


      player = findAudioTrack(); 
      player.play(); 

      for (int i = 0; i < audioQueue.size(); i++) { 
       int written = player.write(audioQueue.get(i), 0, 
         audioQueue.get(i).length); 
      } 

      player.stop(); 
      player.release(); 
      player = null; 
     } 
    }); 
} 

private void startRecording() { 

    recorder = findAudioRecord(); 

    recorder.startRecording(); 
    isRecording = true; 
    recordingThread = new Thread(new Runnable() { 
     public void run() { 
      addAudioToQueue(); 
     } 
    }, "AudioRecorder Thread"); 
    recordingThread.start(); 
} 

private void addAudioToQueue() { 
    short[] capturedAudio = new short[recordBufferSize/2]; 
    while (isRecording) { 
     int read = recorder.read(capturedAudio, 0, capturedAudio.length); 
     audioQueue.add(capturedAudio); 
    } 
    recorder.stop(); 
    recorder.release(); 
    recorder = null; 
} 

}

有誰知道這是爲什麼?

下面是完整的源代碼: https://www.dropbox.com/s/h38cs9vjkztyyro/AudioTesting.java

+0

什麼是記錄? –

+0

只是我在說話 – james

回答

1

,可能還存在的事實,您使用的是short陣列,而不是一個byte陣列做。

公衆詮釋read(字節[] audioData,INT offsetInBytes,INT sizeInBytes)

這可能是因爲此功能只填充各short做的第一byte你留下了各指標的一半是音頻數據的1 byte,而其他byte是垃圾或零。

嘗試使用byte而不是short

+0

不幸的是我仍然得到了點擊噪音 – james

+0

也許這不是關於你如何錄製音頻,而是關於你如何回放音樂? –

+0

可能,我已經添加了完整的源代碼,所以請隨時查看我的錯誤是否存在......我正在構建一個藍牙VOIP,並複製了我從那裏使用的代碼來構建此代碼。藍牙VOIP實際上工作(不是很好的質量,但你可以聽到我的聲音,並理解它),所以我不明白爲什麼這不起作用 – james