Найти голосовой тон на Android - PullRequest
5 голосов
/ 02 апреля 2012

Как я могу найти минимальную, максимальную, среднюю, стандартную высоту звука в моей голосовой записи?Я использую AudioRecord для записи своего голоса.

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

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

После того, как я использую алгоритм FFT для обработки голосовых необработанных данных и получаю float []

после того, как я использую эту функцию:

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

эта функция возвращает массив частот,после поиска в Google я нашел эту формулу http://en.wikipedia.org/wiki/Pitch_(music)

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

, используя эту формулу, я могу найти минимальное, максимальное, среднее значение и шаг стандартного отклонения.

Все правильно?

1 Ответ

0 голосов
/ 02 апреля 2012

БПФ возвращает массив комплексных величин для набора выбранных частотных интервалов звукового спектра.Он напрямую не оценивает частоту основного тона, поскольку музыкальный тональный сигнал - это не просто блок спектральной частоты.

Если вы используете метод определения или оценки основного тона (взвешенная автокорреляция, кепстр, RAPT и т. Д.) В формуле, которую вы цитируетедаст вам номер MIDI для этой частоты основного тона.

...