2012-04-02 5 views
5

내 음성 녹음에서 최소, 최대, 평균, 표준 편차 피치를 어떻게 찾을 수 있습니까? AudioRecord를 사용하여 음성을 녹음합니다.Android에서 음성 피치를 찾으십시오.

frequency = 8000; 
channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO; 
audioEncoding = AudioFormat.ENCODING_PCM_16BIT; 

recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC,frequency, channelConfiguration, audioEncoding, bufferSize); 

I 음성 원시 데이터를 처리하여 얻을 FFT 알고리즘을 사용하면 I가이 기능을 사용한 후 []

플로트 :

private float[] spectrumAnalyz(float[] spectr) { 
float Re; 
float Im; 
float[] spectruData = spectr; 
float[] mySpectrum = new float[(spectruData.length/2) - 1]; 
for (int i = 1, j = 0; i < spectruData.length/2; i++, j++) { 
Re = spectruData[2 * i]; 
Im = spectruData[2 * i + 1]; 
mySpectrum[j] = (float) Math.sqrt(Re * Re + Im * Im); 
} 
return mySpectrum; 
} 

이 함수 리턴 주파수 어레이. 구글 검색 후 난 최소값, 최대 값을 찾을 수있는 공식을 사용하여이 식 http://en.wikipedia.org/wiki/Pitch_(music)

pitch = 69+12*log2(F/440Hz), where F is frequency in Hz. 

하는 결과, 평균 및 표준 데브 피치.

모두 맞습니까?

답변

0

FFT는 선택한 오디오 스펙트럼 빈의 빈에 대한 복소 크기의 배열을 반환합니다. 음악 피치가 단순한 주파수 빈이 아니기 때문에 피치 주파수를 직접 추정하지 않습니다.

피치 검출 또는 추정 방법 (가중 자동 상관, 셉 스트 럼, RAPT 등)을 사용하는 경우 견적을 수식으로하면 피치 주파수에 대한 MIDI 번호가 제공됩니다.

+1

사람의 음성 정보로 어떻게 주파수 데이터를 얻을 수 있습니까? 어쩌면 내가 lib 또는 프레임 워크를 사용해야합니까? – illiaklimov

관련 문제