Intereting Posts

Поиск голоса на Android

Как я могу найти min, max, mean, std dev pitch из моей записи голоса? Я использую 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. 

Используя эту формулу, я могу найти min, max, mean и std dev pitch.

Все верно?

FFT возвращает массив сложных величин для группы выбранных битов частоты спектра звука. Он напрямую не оценивает частоту основного тона, так как музыкальный шаг – это не только спектральная ячейка.

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