2012-04-02 8 views
5

¿Cómo puedo encontrar el tono mínimo, máximo, medio, dev estándar de mi registro de voz? Uso AudioRecord para grabar mi voz.Buscar tono de voz en Android

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

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

Después utilizo algoritmo FFT para procesar los datos en bruto de voz y obtener flotar []

después de usar esta función:

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

esta función de matriz frecuencia de retorno. después de buscar en Google me encontré con esta fórmula http://en.wikipedia.org/wiki/Pitch_(music)

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

usando esta fórmula puedo encontrar mínimo, máximo, media y de paso std dev.

¿Son todos correctos?

Respuesta

0

Una FFT devuelve una matriz de magnitudes complejas para un conjunto de intervalos de frecuencia de espectro de audio seleccionados. No estima directamente la frecuencia de tono, ya que el tono musical no es solo un intervalo de frecuencia espectral.

Si utiliza un método de detección o estimación de tono (autocorrelación ponderada, cepstrum, RAPT, etc.), la fórmula que cita le dará un número MIDI para esa frecuencia de tono.

+1

¿Cómo puedo obtener datos de frecuencia con información de voz humana? Tal vez debería usar alguna lib o framework? – illiaklimov

Cuestiones relacionadas