質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

0回答

1510閲覧

androidアプリ

ootukano

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/01/24 05:59

androidのアプリで鼻歌を録り、それをフーリエ変換して周波数を求め、その周波数にあわせて、MIDIで楽器音を出すというアプリを作っています。
しかし、なかなかうまくいかず、現在フーリエ変換(周波数があっていない)までしかできていません。
↓現時点でできているコード
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.os.Handler;
import edu.emory.mathcs.jtransforms.fft.DoubleFFT_1D;

public class MainActivity extends Activity {

final static int SAMPLING_RATE = 44100;
final static int FFT_SIZE = 4096;
AudioRecord audioRec = null;
boolean bIsRecording = false;
int bufSize;
double dB_baseline = Math.pow(2, 15)FFT_SIZEMath.sqrt(2);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bufSize=AudioRecord.getMinBufferSize(
SAMPLING_RATE,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
if (FFT_SIZE > bufSize) bufSize = FFT_SIZE;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onResume() {
super.onResume();
audioRec = new AudioRecord(
MediaRecorder.AudioSource.MIC,
SAMPLING_RATE,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT,
bufSize *2);

audioRec.startRecording();
bIsRecording = true;
new Thread(new Runnable() {
@Override
public void run() {
short buf[] = new short[bufSize];
while (bIsRecording) {
audioRec.read(buf, 0, buf.length);
Log.d("audiorecord", String.valueOf(buf.length));
DoubleFFT_1D fft = new DoubleFFT_1D(FFT_SIZE) ;
double[] FFTdata = new double[FFT_SIZE];
for(int i=0;i<FFT_SIZE;i++){
FFTdata[i] = (double) buf[i];
}
fft.realForward(FFTdata);
//dBFS計算
double[] dbfs = new double[FFT_SIZE/2];
double max_db = -120d;
int max_i = 0;
for(int i=0;i<FFT_SIZE;i+=2){
dbfs[i/2]=(int)
(20*Math.log10( Math.sqrt(Math.pow(FFTdata[i], 2)
+Math.pow(FFTdata[i+1], 2))/dB_baseline));
if(max_db<dbfs[i/2]){
max_db = dbfs[i/2];
max_i = i/2;
}
}
Log.d("db", "Hz" + (SAMPLING_RATE/ (double) FFT_SIZE)*max_i + "maxdb" + max_db);
}

// 録音停止

audioRec.stop();
audioRec.release();
}
}).start();
}
@Override
protected void onPause() {
super.onPause();
if (bIsRecording) {
bIsRecording = false;
}
}
}
どなたか教えてください。
できればコードをおくってください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syachiku

2017/01/24 06:49

>できればコードをおくってください。 これだと「教えて」ではなく「作って」になってしまうことに気付きましょう。そもそも前回の質問にコード貼り付けただけじゃないですか・・・先ほど貼ったリンク先をしっかり全部読んでください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問