オーディオを録音するためのAndroid AudioRecordとMediaRecorder


91

Androidフォンで人間の声を録音したい。Androidには、AudioRecordMediaRecorderの 2つのクラスがあることに気付きました。2つの違いは何ですか?それぞれの適切な使用例は何ですか?

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

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

回答:


82

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


AudioRecordのサンプルコードはありますか?私が見つけたもののほとんどはMediaRecorder ...です
Rommel Paras

@RommelParasは、Androidソースの「テレグラム」でこのクラスを調べます。github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/...
デヴィッド

@Davidもっと基本的なサンプルを知っていますか?それ自体で機能するものですか?
Android開発者

@androiddeveloper残念ながらありません。
デビッド

33

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

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

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


getMaxAmplitude()メソッドについて言及していただきありがとうございます。それがおそらく私が必要とするすべてです。
Dheeraj Bhaskar

MediaRecorderを使用してビジュアライザーを実装するにはどうすればよいですか?
OnePunchMan 2015年

ここでgetMaxAmplitudeは正確に何を助けますか?ビジュアライザーのために、毎回最新のものを取得する必要はありませんか?
アンドロイド開発者

18

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.