2012-04-02 6 views
5

私の音声記録から最小、最大、平均、標準偏差ピッチを見つけるにはどうすればよいですか? AudioRecordを使用して自分の声を録音します。Androidで音声ピッチを見つける

frequency = 8000; 
channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO; 
audioEncoding = AudioFormat.ENCODING_PCM_16BIT; 

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

I音声生データを処理し、私はこの機能を使用した後にフロート[]

を取得するために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; 
} 

この関数の戻り周波数アレイ。グーグルで検索した後、私はMIN、MAXを見つけることができ、この式を使用して、この式 http://en.wikipedia.org/wiki/Pitch_(music)

pitch = 69+12*log2(F/440Hz), where F is frequency in Hz. 

を発見し、意味とstd devのピッチ。

すべては間違いありませんか?

答えて

0

FFTは、選択されたオーディオスペクトラム周波数ビンの束の複素数の配列を返します。音楽ピッチは単なるスペクトル周波数ビンではないので、ピッチ周波数を直接的に推定するものではない。

ピッチ検出または推定方法(重み付き自己相関、ケプストラム、RAPTなど)を使用する場合は、引用した数式でそのピッチ周波数のMIDI番号が与えられます。

+1

人間の音声情報でどのように周波数データを取得できますか?たぶん私はいくつかのlibやフレームワークを使用する必要がありますか? – illiaklimov

関連する問題