web-dev-qa-db-ja.com

Android AudioRecord vs. MediaRecorder for audio recording

Android携帯電話で人間の声を録音したい。Androidこれを行うための2つのクラスがあります: AudioRecord と- MediaRecorder 。2つの違いと、それぞれの適切なユースケースを教えてください。

人間の音声をリアルタイムで分析して振幅などを測定できるようにしたいのですが、AudioRecordがこのタスクに適していることを理解しているのは正しいですか?

公式のAndroid オーディオを録音するためのガイドWebページ に気付きました。彼らは、AudioRecordの言及なしにMediaRecorderを使用しています。

82

記録の進行中に分析を行いたい場合は、AudioRecordを自動的にファイルに記録するため、MediaRecorderを使用する必要があります。 AudioRecordには、startRecording()を呼び出した後、AudioRecordインスタンスから自分でデータをポーリングする必要があるという欠点があります。また、内部バッファーがオーバーランしないように、データを十分に高速で読み取り、処理する必要があります(logcatの出力を見ると、AudioRecordが通知します)。

74
Stephan

私が理解しているように、MediaRecorderは出力に圧縮されたオーディオファイルを与えるブラックボックスであり、AudioRecorderは生のサウンドストリームを与えるだけで、自分で圧縮する必要があります。

MediaRecorderは、最後にgetMaxAmplitude()メソッドを呼び出したときの最大振幅を提供するため、たとえばサウンドビジュアライザーを実装できます。

したがって、ほとんどの場合、MediaRecorderは、複雑なサウンド処理を行う必要があり、生のオーディオストリームにアクセスする必要がある場合を除き、最良の選択です。

29
Lampapos

AudioRecordererはまずデータをminBufferに保存し、次にそこから一時バッファーにコピーし、MediaRecorderでファイルにコピーします。 AudioRecorderでは、必要な位置に保存されたデータをコピーするためにapi setRecordPosition()が必要ですが、MediaRecorderでは、マーカーの位置を設定するためにファイルポインターがこのジョブを行います。 AudioRecorderは、エミュレータで実行されるアプリに使用できます。これは、8000などの低サンプルレートを提供することで実行できますが、MediaRecorderを使用すると、エミュレータを使用してオーディオを録音できません。 AudioRecordでは画面はしばらくしてからスリープしますが、MediaRecorderでは画面はスリープしません。

16
sanjeev51