나는 안드로이드 API의 AudioRecord 기능을 뒤적 거리며 이상한 행동을 발견했다.Android AudioRecord에 대한 질문이 있으십니까?
배경 정보 : 휴대 전화는 HTC Incredible입니다. 에뮬레이터와 함께 Android 개발 용 Eclipse 플러그인을 사용하고 있습니다. 대상 플랫폼 또는 OS는 2.2 ... 내 전화기가 사용하는 것이기 때문에.
일부 코드 :
bufferSize = AudioRecord.getMinBufferSize(FREQUENCY, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, FREQUENCY, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
이 내가 함께 가지 audiorecord의 API 설정에 사용하는 코드입니다. 이제 에뮬레이터의 경우 FREQUENCY가 작동하려면 8000으로 설정하는 것이 좋습니다. 버퍼 크기 640으로 돌아옵니다. 44100을 사용하는 전화의 경우 하나의 문제는 파도에 대한 결과 PCM 데이터가 8 비트 부호있는 웨이브처럼 보입니다. 나는 값을 -127에서 128로 얻는다. 나는 값 AudioFormat.ENCODING_PCM_16BIT
이 뭔가 다른 것을 생산할 것이라고 생각했다.
난 스레드와 오디오
public void run() {
while(isRecording) {
audioRecord.startRecording();
byte[] data = new byte[bufferSize];
audioRecord.read(data, 0, bufferSize);
listener.setData(data);
handleData(data);
}
audioRecord.release();
}
내가
SurfaceView
를 그래픽을 이용하여 실시간으로 전파 대응하는 표시 방법이 처리. MIC에서 많은 소음이 오는 것 같습니다. 나는 에뮬레이터와 전화에서이 잡음을 얻는다. 일종의 필터를 통해 데이터를 실행해야합니까? 이 데이터를 사용하여 재미있는 FFT를 계산하고 웨이브를 가지고 놀고 싶습니다. 그러나 어떻게 든 잡음을 줄여야합니다.
이 경험이있는 사람이 있습니까? 누구든지 해결책이 있습니까?
나는 당신의 시간과 응답, 덕분에, 나는 조금의 도움을받을 수 있습니다 DK
일부 FFT 기술을 사용하여 노이즈를 줄였으며 몇 가지 코드 예제가 있습니다. 나는 지금 여행 중이지만 내가 돌아 왔을 때 토론을 계속하고 싶다. 귀하의 의견을 보내 주셔서 감사합니다. – dakira
intervalFrames는 통보 받고자하는 샘플 수입니다. 8000에서 샘플링하는 경우 intervalFrames = 4000은 알림 청취자에게 1/(8000/4000) = 0.5 초마다 호출합니다. 리스너 함수가 호출되도록 읽기를 시작해야하며, 또한 읽기 버퍼 크기가> = intervalFrames인지 확인해야합니다. –
+1 getNativeOutputSampleRate(); 어떻게 당신 문제를 해결 했나요? 비슷한 문제로 고민 중입니까? http://stackoverflow.com/questions/9413998/live-audio-recording-and-playing-in-android – aProgrammer