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?
Come posso ottenere dati di frequenza con informazioni vocali umane? Forse dovrei usare qualche lib o framework? – illiaklimov