web-dev-qa-db-ja.com

Android SDKを使用して生のPCMデータからWAVファイルを作成する

AudioRecordクラスを使用してWAVファイルを録音しようとしています。問題は、生のPCMデータのみを提供し、それをファイルに書き込むと、ヘッダー情報がないため、どのメディアプレーヤーでも再生されないことです。この生データからWAVファイルを作成するにはどうすればよいですか?

または、代わりに、AndroidのサウンドをWAVファイル(またはMP3)に録音する他の方法はありますか?

ああ、MediaRecorderはWAV形式もMP3形式もサポートしていないので使用できないことを私は知っています。

20
user496854

OK、私はこれを理解しました。この投稿は私を助けるのに重要でした: http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-Java

基本的に、ByteArrayOutputStreamを使用してAudioRecordから生のPCMデータを書き込みました。これにより、プロセスが完了したときにバイト配列とそのサイズを取得できます。次に、そのデータをSampleRate、BitRate、Stereo/Mono設定と組み合わせて使用​​して、上記のリンクに従ってWAVヘッダーを作成できます。結果のファイルは完全に機能します!

14
user496854

MediaRecorder.setOutputFormat()を確認してください。記録にさまざまなコンテナ形式を設定できます。 MediaRecorder.OutputFormat.MPEG_4とMediaRecorder.OutputFormat.THREE_GPPがあります。 RAWで許可されているformatは、setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);のみです。

申し訳ありませんが、MP3は利用できません。あなたは本当に録音のためにmp3が必要ですか? MP3の反対側のWAVはコンテナであり、形式ではありません。 WAVは、あらゆる種類のエンコード形式にすることができます。

生のpcmデータの前にWAVRIFFヘッダーをいつでも自由に追加できます(形式を正確に知っている限り)。それがどのように見える必要があるかについては、ここをチェックしてください: http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

0
Oliver