2016-05-31 2 views
1

녹음 된 사운드가 특정 임계 값을 초과하면 오디오 녹음을 시작해야하는 안드로이드 응용 프로그램을 만들고 있습니다.안드로이드에서 mediaRecorder.getMaxAmplitude()가 반환 한 값을 분석하는 방법

나는 MediaRecorder 클래스의 getMaxAmplitude() 메소드가 소리의 크기를 측정하기 위해 잡음의 크기를 추정한다는 것을 연구 조사했다. 0에서 +32767 사이의 값을 반환합니다.

여기에 제가 작성한 코드가 있습니다. getMaxAmplitude() 함수에 의해 반환 된 값에 대한 표준 단위가 없기 때문에

MediaRecorder mediaRecorder = new MediaRecorder(); 
while(True){ 
    if (mediaRecorder.getMaxAmplitude() > THRESHOLD) 
     System.out.println("Recording sound"); 
    else 
     System.out.println("Sound recording not above the threshold level); 
} 

나는 문제가 임계 값을 알아내는 있습니다. 누군가가 getMaxAmplitude() 함수에 의해 반환 된 값에서 데시벨 (dB) 또는 다른 유용한 단위로 변환을 제안 할 수 있다면 바람직합니다.

+0

이 질문에 대한 답변을 찾으려고합니다. 내가 하나를 생각해 내면 대답으로 게시 할 것입니다. – aditya

답변

2

getMaxAmplitude()의 출력을 해석 할 수있는 쉬운 방법이 없기 때문에 휴대 전화의 특정 하드웨어가 얻는 최대 값을 얻을 수 있습니다. 안타깝게도 제조업체가 Android OS 요구 사항을 준수한다고해서 모든 마이크에서 동일한 응답을 얻을 수있는 것은 아닙니다. 실제로 동일한 제조업체의 모든 장치에 동일한 종류의 마이크가 없으므로 동일한 주파수 응답 또는 감도를 얻지 못합니다. 이 adimentional (하드웨어에 따라 다름)에서 dB로 변환하려면 getMaxAmplitude() 단위가 반환되지만 dB = 20log10(getMaxAmplitude())을 사용하면됩니다. 이제이 장치를 다양한 장치에서 작동 시키려면 앱에 보정 단계를 포함시켜 절대 값 대신 동적 장치 종속 임계 값을 설정할 수 있도록 조언합니다. 어쩌면 임계 값을 보정 할 때 얻는 강도와 캡처하려고하는 강도 사이의 관계로 설정할 수 있습니다. 앱의 특성을 모르지만 내가 너라면이 두 가지 중 적어도 하나를 비교할 것을 염두에 두어야합니다. 마이크 입력이 가장 많이 포화 된 순간 (어쩌면 당신은 스피커에서 자신의 큰 소리를 만들어 녹음 할 수 있습니다)

+0

예, 많은 의미가 있습니다. 이런 식으로 보정을 할 생각입니다. 전화기의 마이크를 사용하여 소리가 아주 조용한 환경에서 녹음 된 다음 전화를 사용하여 전화 스피커에서 생성 된 소리를 녹음하십시오. 소리 측정기와 같은 응용 프로그램이 어떻게 만들어 지는지 또는 소리 측정기가 계산 된 데시벨 값을 사용하도록 제공하는 API가 있는지 궁금합니다. – aditya

+0

답변이 적합한 경우 모든 사람이 이것이 문제를 해결할 수있는 방법이라는 것을 알 수 있도록 승인으로 표시하십시오. 사운드 측정기 응용 프로그램이 어떻게 만들어 졌는지 또는 다른 사람들이 사용할 수 있도록 API를 제공하는지는 알 수 없습니다. 그것에 대한 검색을 해보십시오. 답을 찾지 못하면 다른 질문을 올리십시오. 우리는 모두 – VMMF

+0

을 찾을 수 있습니다. 나는이 답을 올바른 것으로 표시하고 싶지만, 이것을 사용하여 문제를 완전히 해결할 수는 없습니다. . 몇 가지 분석을했고 질문에 지정된 수식은 사운드 측정기와 같은 앱에서 계산 한 약 45 개에 비해 데시벨 값을 60으로 계산합니다. 나는 여전히 정답으로 표시하기 전에 다른 사람들이 대답하고 내 연구를하기를 바랄 것입니다. – aditya