サウンドを録音/再生するときの音質が悪い-AndroidSDK
-
08-10-2019 - |
質問
録音してから、記録されたばかりのファイルを再生しようとすると問題があります。音を録音して演奏することもできますが、品質は悪臭を放ちます。悪いだけでなく、耳を傾けるのは本当に難しく、コンピューター生成された音声のように聞こえます。 Andriod SDK-Emulatorを使用しています。録音を設定するコードは次のようになります。
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(path);
recorder.prepare();
recorder.start();
そして、ファイルを再生するコードは後でこのように見えます。
MediaPlayer mp = new MediaPlayer();
mp.reset();
mp.setDataSource(path);
mp.prepare();
mp.start();
オーディオファイルの音が本当に悪くなるのか、それが悪くなるエミュレータだけで、実際の電話で動作するのか、どの部分がわかりません。
解決
2つの異なるオブジェクト、AudiorEcorderとMediareCorderについて話している。
他のヒント
これらを試してください
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setAudioChannels(2);
recorder.setAudioEncodingBitRate(128);
recorder.setAudioSamplingRate(44100);
このコードがローエンドAndroidデバイスでクラッシュするのが見つかった場合は、SetAudioChannelsを削除してSetAudioSomplingrateを削除してみてください。
エミュレータだけではありません。私のNexus 10でも悪いように聞こえます。
Mohit Marwalの答えと同様に、サンプリングレートとビットレートを設定できます。 44100は、標準のCD品質サンプリングレートです。ほとんどの商用オーディオのダウンロードは、Mohitの回答に示されているように、少なくとも128000ビットあたり128000ビット(1秒あたりのキロビットではありません)でエンコードされています。したがって、これらは良い開始値になります。また、ステレオマイクがあり、ステレオで記録する必要がない限り、ファイルサイズを半分にカットするために1つのチャネルのみを使用する必要があります。
recorder.setAudioChannels(1);
recorder.setAudioEncodingBitRate(128000);
recorder.setAudioSamplingRate(44100);
これらの値を設定すると、ファイルのサイズと品質の両方が増加しましたが、それでも私が好むレベルではありません。おそらく、残りのノイズは私のデバイス上の貧弱なマイクからのものですが、外部マイクでテストしたり、他のデバイスを比較したりしていません。
AudioRecord
記録の質に影響を与えるさまざまな議論を取ります。
これらをコンストラクターに設定してみてください。
- オーディオソース:マイク
- サンプルレート:16000
- チャネル数:Channel_Configuration_mono
- フォーマット:encoding_pcm_16bit
- バッファサイズ:16000 * 30(30秒バッファー)
コード例:
recorder = new AudioRecord(
MediaRecorder.AudioSource.MIC,
16000,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
16000*30);