2013-07-01 7 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; 
} 

}이 왜

사람이 알고 있나요? 그것은 아마도 당신이 byte 배열 대신 short 배열을 사용하고 있다는 사실과 관련이있다 https://www.dropbox.com/s/h38cs9vjkztyyro/AudioTesting.java

+0

녹음 내용은 무엇입니까? –

+0

그냥 내 말을 – james

답변

1

:

다음은 전체 소스 코드입니다.

공개 INT read (바이트 [] audioData, INT offsetInBytes, INT sizeInBytes)

그것은이 함수는 각각의 short의 제 byte 충전되는 가능성하면 각 인덱스의 절반으로 남아 오디오 데이터의 1 byte이고, 다른 하나는 byte이고, 정크 또는 제로이다.

short 대신 byte 어레이를 사용해보십시오.

+0

불행히도 나는 여전히 클릭 소리가 들린다 – james

+0

아마 오디오를 녹음하는 방법이 아닌, 어떻게 다시 재생할 것인가? –

+0

아마도, 전체 소스 코드를 추가 했으므로 내 오류가 있는지 확인해보십시오 ... 나는 블루투스 VoIP를 구축 중이며 거기에서 사용한 코드를 복사했습니다. 블루투스 VOIP은 실제로 작동합니다 (좋은 품질은 아니지만 내 목소리를 듣고 이해할 수 있습니다). 왜 이것이 작동하지 않는지 이해할 수 없습니다. – james

관련 문제