この記事は前回の「Androidで劣化無しでデジタル録音!「sndcpy」を使う」に関連する記事です。
前回、sndcpyはデフォルトでサンプリング周波数が48kHzに固定されていると書きました。今回は自由にサンプリング周波数を変えられるように改造してみます。他の部分にも手を加えていきます。
なお、この記事は専門的なものを取り扱うので少し難しいかもしれません。ソースコードは https://github.com/rom1v/sndcpy にあります。Javaで書かれており、Android Studioでビルド可能です。
早速改造していきます。
サンプリング周波数の設定はRecordService.javaの43行目で定数として定義されています。
private static final int SAMPLE_RATE = 48000; 定数のため、このままだと宣言後に再代入できないので、finalを消します。
private static int SAMPLE_RATE = 48000; 次に、amコマンドでIntentとして値を渡せるように改造します。
このアプリは、まずアプリの起動時(onCreate())に権限確認をしていて、権限があることを確認してからonActivityResult()の中でサービスを開始しています。その部分がMainActivity.javaの49行目、53行目~60行目となります。
サービスを開始する際はRecordServiceのstart()を呼び出していて、その時にIntentも渡しているので、そこにサンプリング周波数の情報も入れます。
data.putExtra("SAMPLE_RATE", mSampleRate); RecordService.start(this, data); RecordServiceのstart()ではIntentからサンプリング周波数の情報を取り出してSAMPLE_RATEに代入します。
private static int SAMPLE_RATE = 48000; private static int SAMPLE_RATE_REAL = 0; //... public static void start(Context context, Intent data) { SAMPLE_RATE_REAL = data.getIntExtra("SAMPLE_RATE", 48000); SAMPLE_RATE = SAMPLE_RATE_REAL; Log.d(TAG, "Current SAMPLE_RATE is " + SAMPLE_RATE + " Hz"); //... } SAMPLE_RATE_REAL に代入しているのは実装上の都合です。この変数はSAMPLE_RATEと同様に定義します。 getIntExtraの第2引数にはデフォルト値が指定できるので、何も指定されなかったときは48kHzにしています。...