簡體   English   中英

在Android上查找語音音調

[英]Find voice pitch on 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算法處理語音原始數據並得到浮點數[]

我使用這個功能后:

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.

使用這個公式我可以找到min,max,mean和std dev pitch。

一切都正確嗎?

FFT返回一組復雜幅度的陣列,用於一組選定的音頻頻譜頻段。 它不直接估計音調頻率,因為音調不僅僅是頻譜頻率。

如果您使用音高檢測或估計方法(加權自相關,倒譜,RAPT等),您引用的公式將為您提供該音高頻率的MIDI編號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM