如何从我的语音记录中找到最小、最大、平均、标准偏差音调?
我使用 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;
}
该函数返回频率数组。在谷歌搜索后我发现了这个公式http://en.wikipedia.org/wiki/Pitch_(音乐) http://en.wikipedia.org/wiki/Pitch_(music)
pitch = 69+12*log2(F/440Hz), where F is frequency in Hz.
使用这个公式我可以找到最小值、最大值、平均值和标准差间距。
都正确吗?