Jus*_*tin 9 android buffer-overflow audio-recording sampling mediarecorder
我有一个问题,使用Android的MediaRecorder记录从麦克风到.m4a文件(AAC-LC,MPEG-4容器)的声音.从API级别18开始,默认采样率从44.1或48 kHz(取决于设备)降至仅8 Hz.如果我使用MediaRecorder.setAudioSamplingRate指定采样率,它会使用指定的速率,但录制中会有很多奇怪的噪音.
在LogCat中,以下警告会不时发生:
(1)标签:AudioSource文本:AudioRecord报告超限
(2)标签:AudioFlinger文本:RecordThread:缓冲区溢出
这是代码:
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioChannels(2);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setAudioSamplingRate(48000); // if not specified, defaults to 8kHz, if specified 44.1 or 48 kHz, lots of noise
recorder.setOutputFile("test.m4a");
try {
recorder.prepare();
recorder.start();
} catch (IOException ioe) {
Log.e(TAG, "IOException", ioe);
} catch (IllegalStateException ise) {
Log.e(TAG, "IllegalStateException", ise);
} catch (Exception e) {
Log.e(TAG, "Exception", e);
}
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏.
您可以设置 SamplingRate(如您所做的那样)和 EncodingBitRate(您已省略)。
我已经能够使用以下方法实现非常高质量的录音:
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);
mRecorder.setAudioSamplingRate(48000);
mRecorder.setAudioEncodingBitRate(384000);
Run Code Online (Sandbox Code Playgroud)
这将以每个样本 8 位进行编码,这可能超出了大多数设备上麦克风的可用质量。
| 归档时间: |
|
| 查看次数: |
4686 次 |
| 最近记录: |