2012-04-02 16 views
5

Come posso trovare il tono minimo, massimo, medio, dev dev dalla mia registrazione vocale? Uso AudioRecord per registrare la mia voce.Trova pitch vocale su Android

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

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

Dopo che uso algoritmo FFT per elaborare i dati grezzi vocali e ricevere float []

dopo uso questa funzione:

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; 
} 

questa funzione di matrice frequenza ritorno. dopo la ricerca in google ho trovato questa formula http://en.wikipedia.org/wiki/Pitch_(music)

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

utilizzando questa formula posso trovare min, max, dire e il passo std dev.

Sono tutti corretti?

risposta

0

Un FFT restituisce una matrice di grandezze complesse per un gruppo di intervalli di frequenza dello spettro audio selezionati. Non stimola direttamente la frequenza del pitch, poiché il pitch musicale non è solo un bin di frequenza spettrale.

Se si utilizza un metodo di rilevamento del passo o di stima (autocorrelazione ponderata, cepstrum, RAPT, ecc.), La formula citata fornirà un numero MIDI per quella frequenza di passo.

+1

Come posso ottenere dati di frequenza con informazioni vocali umane? Forse dovrei usare qualche lib o framework? – illiaklimov

Problemi correlati