3

次のようなコードを使用して、Android マイクを実験するプロジェクトを開始しています。

    mRecorder = new MediaRecorder();
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mRecorder.setOutputFile(mFileName);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

その後、prepare() と start() でマイク オーディオの録音を開始します。

問題は、NoiseSuppressor などのオーディオ処理エフェクトも追加しようとしていることです。API ドキュメントには、NoiseSuppressor がこれで完了したと記載されています。

 NoiseSuppressor create (int audioSession)

録音ストリームを初期化し、そのストリームの audioSession を取得するための適切な方法は何ですか? mediaRecorder から audioSession を取得できないことに驚いています。

オーディオ ストリームを設定する 2 つの方法があるのはなぜですか? 私は AudioRecord アプローチを見ますが、API ドキュメントは上記のアプローチが推奨されることを示唆しています。

何を与える?

4

3 に答える 3

0

NoiseSuppressor が必要な場合は、MediaRecorder と共に AudioManager を使用する必要があります。ノイズ抑制には、以下のコードを使用してください:

// 以下は、Jelly Bean 以降でのみ有効です。

 audioManager.setMode(AudioManager.MODE_IN_CALL);
    audioManager.setParameters("noise_suppression=on");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    Log.i("Trying to clean up audio because running on SDK " + Build.VERSION.SDK_INT);

    if (noise && NoiseSuppressor.create(getAudioSessionId()) == null) {
        Log.i("NoiseSuppressor not present :(");
    } else {
        Log.i("NoiseSuppressor enabled!");
    }

    if (gain && AutomaticGainControl.create(getAudioSessionId()) == null) {
        Log.i("AutomaticGainControl not present :(");
    } else {
        Log.i("AutomaticGainControl enabled!");
    }

    if (echo && AcousticEchoCanceler.create(getAudioSessionId()) == null) {
        Log.i("AcousticEchoCanceler not present :(");
    } else {
        Log.i("AcousticEchoCanceler enabled!");
    }
}
于 2016-03-18T05:49:13.767 に答える