前提・実現したいこと
threadのwhileループ中にtxtを上書きではなく、追加していく形で作りたいと思っています。
また、byte型ではなく、String型での出力を行いたいです。
Java
fft = new Thread(new Runnable() { @Override public void run() { byte buf[] = new byte[bufSize * 2]; while (bIsRecording) { audioRec.read(buf, 0, buf.length); //エンディアン変換 ByteBuffer bf = ByteBuffer.wrap(buf); bf.order(ByteOrder.LITTLE_ENDIAN); short[] s = new short[(int) bufSize]; for (int i = bf.position(); i < bf.capacity() / 2; i++) { s[i] = bf.getShort(); } //FFTクラスの作成と値の引き渡し FFT4g fft = new FFT4g(FFT_SIZE); double[] FFTdata = new double[FFT_SIZE]; for (int i = 0; i < FFT_SIZE; i++) { FFTdata[i] = (double) s[i]; // not okay both are different in length } fft.rdft(1, FFTdata); // デシベルの計算 double[] dbfs = new double[FFT_SIZE / 2]; double max_db = -120d; int max_i = 0; dbfs[650 / 2] = (int) (20 * log10(Math.sqrt(Math .pow(FFTdata[650], 2) + Math.pow(FFTdata[650 + 1], 2)) / dB_baseline)); max_db = dbfs[650 / 2]; max_i = 650 / 2; double[] dbfs2 = new double[FFT_SIZE / 2]; double max_db2 = -120d; int max_i2 = 0; dbfs2[1095 / 2] = (int) (20 * log10(Math.sqrt(Math .pow(FFTdata[1095], 2) + Math.pow(FFTdata[1095 + 1], 2)) / dB_baseline)); max_db2 = dbfs2[1095 / 2]; max_i2 = 1095 / 2; //音量が最大の周波数と,その音量を表示 Log.d("fft","周波数:"+ resol * max_i+" [Hz] 音量:" + max_db+" [dB]"); Log.d("fft","周波数2:"+ resol * max_i2+" [Hz] 音量:" + max_db2+" [dB]"); double max_db3 = -120d; max_db3 = (int) log10(Math.pow(10,(0.1 * max_db)) + Math.pow(10,(0.1 * max_db2))); Log.d("fft","検査結果:"+" 音量:" + max_db3+" [dB]"); try (FileOutputStream fileOutputstream = openFileOutput("file.txt",Context.MODE_APPEND);){ fileOutputstream.write(); } catch (IOException e) { e.printStackTrace(); } Button Button = (Button)findViewById(R.id.button); Button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 録音停止 bIsRecording=false; audioRec.stop(); audioRec.release(); } }); }; } }); //スレッドのスタート fft.start();
あなたの回答
tips
プレビュー