Android携帯電話で人間の声を録音したい。Androidこれを行うための2つのクラスがあります: AudioRecord と- MediaRecorder 。2つの違いと、それぞれの適切なユースケースを教えてください。
人間の音声をリアルタイムで分析して振幅などを測定できるようにしたいのですが、AudioRecordがこのタスクに適していることを理解しているのは正しいですか?
公式のAndroid オーディオを録音するためのガイドWebページ に気付きました。彼らは、AudioRecordの言及なしにMediaRecorderを使用しています。
記録の進行中に分析を行いたい場合は、AudioRecord
を自動的にファイルに記録するため、MediaRecorder
を使用する必要があります。 AudioRecord
には、startRecording()
を呼び出した後、AudioRecord
インスタンスから自分でデータをポーリングする必要があるという欠点があります。また、内部バッファーがオーバーランしないように、データを十分に高速で読み取り、処理する必要があります(logcatの出力を見ると、AudioRecord
が通知します)。
私が理解しているように、MediaRecorder
は出力に圧縮されたオーディオファイルを与えるブラックボックスであり、AudioRecorder
は生のサウンドストリームを与えるだけで、自分で圧縮する必要があります。
MediaRecorder
は、最後にgetMaxAmplitude()
メソッドを呼び出したときの最大振幅を提供するため、たとえばサウンドビジュアライザーを実装できます。
したがって、ほとんどの場合、MediaRecorder
は、複雑なサウンド処理を行う必要があり、生のオーディオストリームにアクセスする必要がある場合を除き、最良の選択です。
AudioRecordererはまずデータをminBufferに保存し、次にそこから一時バッファーにコピーし、MediaRecorderでファイルにコピーします。 AudioRecorderでは、必要な位置に保存されたデータをコピーするためにapi setRecordPosition()が必要ですが、MediaRecorderでは、マーカーの位置を設定するためにファイルポインターがこのジョブを行います。 AudioRecorderは、エミュレータで実行されるアプリに使用できます。これは、8000などの低サンプルレートを提供することで実行できますが、MediaRecorderを使用すると、エミュレータを使用してオーディオを録音できません。 AudioRecordでは画面はしばらくしてからスリープしますが、MediaRecorderでは画面はスリープしません。