首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android上查找语音音高

在Android上查找语音音高
EN

Stack Overflow用户
提问于 2012-04-02 23:29:23
回答 1查看 2.1K关注 0票数 5

如何从我的语音记录中找到最小、最大、平均、标准开发音高?我使用AudioRecord录制我的声音。

代码语言:javascript
复制
frequency = 8000;
channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
audioEncoding = AudioFormat.ENCODING_PCM_16BIT;

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

使用快速傅立叶变换算法对语音原始数据进行处理,得到float[]

在我使用这个函数之后:

代码语言:javascript
复制
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)

代码语言:javascript
复制
pitch = 69+12*log2(F/440Hz), where F is frequency in Hz.

使用这个公式,我可以找到最小,最大,平均和标准开发音高。

都是正确的吗?

EN

回答 1

Stack Overflow用户

发布于 2012-04-03 00:42:13

FFT返回一组所选音频频谱频率段的复数值数组。它不直接估计基音频率,因为音乐基音不仅仅是频谱频率段。

如果您确实使用基音检测或估计方法(加权自相关、倒谱、RAPT等)您引用的公式将为您提供该音调频率的MIDI数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9979196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档