次のコードで少しのオーディオを録音するAndroidアプリを作成しました(公式のAndroid開発者ガイドから取得)
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
final String fileName = getFileName();
recorder.setOutputFile(fileName);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
recorder.prepare();
} catch (Exception e) {
throw new RuntimeException("Failed to prepare recorder", e);
}
recorder.start();
録音後、録音したオーディオを再生します
MediaPlayer player = new MediaPlayer();
player.setDataSource(new FileInputStream(getFileName()).getFD());
player.prepare();
player.start();
また、recorder.getMaxAmplitude(); を呼び出して録音しながらオーディオを分析します。
HTC ONE S (Android 4) とかなりローエンドの Samsung Galaxy Young (GT-S5360、Android 2.3.6) の 2 つのデバイスでこれを実行しました。バックグラウンド ノイズを録音してみます (同じ部屋でラジオをオンにします)。非常に残念なのは、Samsung デバイスが 1000 を超えるレベル、場合によっては 10 000 を超えるレベルで振幅を報告するのに対し、HTC のトップ エンド デバイスは 1000 未満 (200-400) のレベルで振幅を報告することです。これらの振幅に応じて、htc デバイスでのオーディオ再生の音量は非常に低くなりますが、サムスンが録音したオーディオの音量は許容レベルです。(両方のデバイスのメディア ボリュームが高く設定されています)。
しかし、工場で提供されているビデオ/オーディオ録音アプリケーションを htc デバイスで使用すると、それを再生すると、オーディオは非常に敏感なレベルに見えます。
利用可能なすべての MediaRecorder.AudioSource 値で録音を試みましたが、それらのほとんどは同じですが、不思議なことに機能していないものもあります (VOICE_CALL、VOICE_UPLINK)。
敬具、ミコライ