如何从我的语音记录中找到最小、最大、平均、标准开发音高?我使用AudioRecord录制我的声音。
frequency = 8000;
channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC,frequency, channelConfiguration, audioEncoding, bufferSize);使用快速傅立叶变换算法对语音原始数据进行处理,得到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_(music)
pitch = 69+12*log2(F/440Hz), where F is frequency in Hz.使用这个公式,我可以找到最小,最大,平均和标准开发音高。
都是正确的吗?
发布于 2012-04-03 00:42:13
FFT返回一组所选音频频谱频率段的复数值数组。它不直接估计基音频率,因为音乐基音不仅仅是频谱频率段。
如果您确实使用基音检测或估计方法(加权自相关、倒谱、RAPT等)您引用的公式将为您提供该音调频率的MIDI数字。
https://stackoverflow.com/questions/9979196
复制相似问题