現在AudioRecord(audioRec1)を使用してFFTのプログラムを作成しています。
以下のコードをTimerTaskを使用して定期的に実行しているのですが、1回目の出力では正しくFFTが行われていない状態になります。2回目以降は恐らくバッファに溜まっているので正しくFFTが行われていると思います。
本来は1回目から正しい値を取得したいと考えています。
似たような経験をされた方はいますでしょうか?
解決方法も分かればご教授お願いします。
public
1 short buf[] = new short[bufSize1]; 2 audioRec1.startRecording(); 3 audioRec1.read(buf, 0, buf.length); 4 DoubleFFT_1D fft = new DoubleFFT_1D(FFT_SIZE1) ; 5 double[] FFTdata = new double[FFT_SIZE1]; 6 for(int i=0;i<FFT_SIZE1;i++){ 7 FFTdata[i] = (double) buf[i]; 8 } 9 fft.realForward(FFTdata); 10 double[] dbfs = new double[FFT_SIZE1/2]; 11 double max_db = 0; 12 int max_i = 0; 13 for(int i=418;i<FFT_SIZE1;i+=2){ //i=0;i<FFT_SIZE;i+=2 14 dbfs[i/2]=(int) 15 ( Math.sqrt(Math.pow(FFTdata[i], 2) 16 +Math.pow(FFTdata[i+1], 2))); 17 if(max_db<dbfs[i/2]){ 18 max_db = dbfs[i/2]; 19 max_i = i/2; 20 } 21 } 22 Date now = new Date(System.currentTimeMillis()); 23 String nowText = formatter.format(now); 24 Log.d("Time",""+nowText); 25 Log.d("db", "Hz" + (SAMPLING_RATE/ (double) FFT_SIZE1)*max_i + "maxdb" + max_db); 26コード
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/23 08:17
2016/06/23 08:32
2016/06/27 14:45
2016/06/28 08:09