and*_*per 6 audio android recording
我的项目要求我能够在Android设备上录制音频.我使用MediaRecorder()实现了解决方案,但录制的音频质量很差.我究竟做错了什么?我必须认为这不能记录音频的唯一方法:)也许我做错了什么,我在下面包括我的代码.请指出正确的方向.
谢谢!
MediaRecorder recorder = new MediaRecorder();
File outputFile = new File(Environment.getExternalStorageDirectory(), "audio.3gp");
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(outputFile.getAbsolutePath());
recorder.prepare();
recorder.start();
// stop
recorder.stop();
recorder.reset();
recorder.release();
Run Code Online (Sandbox Code Playgroud)
试试这段代码:
MediaRecorder recorder = new MediaRecorder();
File outputFile = new File(Environment.getExternalStorageDirectory(), "audio.3gp");
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setAudioEncodingBitRate(16);
recorder.setAudioSamplingRate(44100);
recorder.setOutputFile(outputFile.getAbsolutePath());
recorder.prepare();
recorder.start();
Run Code Online (Sandbox Code Playgroud)
你会得到一些改进,但不要期望太多.您始终可以尝试使用此OpenSource项目中的RehearsalAudioRecord类来保存未压缩
将类实现到项目中的方法非常简单.您只需要通过以下方式替换MediaRecorder:
RehearsalAudioRecorder recorder = new RehearsalAudioRecorder(RehearsalAudioRecorder.RECORDING_UNCOMPRESSED, MediaRecorder.AudioSource.MIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT);
recorder.setOutputFile(outputFile.getAbsolutePath());
recorder.prepare();
recorder.start();
Run Code Online (Sandbox Code Playgroud)
您将能够记录相当大的WAVE文件,但如果您需要质量是唯一的方法.请注意,在旧设备中,此代码可以
我在录音质量方面遇到的一个大问题是我将比特率设置得太低,为16. 16是一个通常与比特深度相对应的值,而不是比特率.比特率通常列为kbps,但MediaRecorder.setAudioEncodingBitRate()采用bps(注意没有"k").试试这个:
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(...);
recorder.setAudioEncoder(...);
final int bitDepth = 16;
final int sampleRate = 44100;
final int bitRate = sampleRate * bitDepth;
recorder.setAudioEncodingBitRate(bitRate);
recorder.setAudioSamplingRate(sampleRate);
recorder.setOutputFile(...);
recorder.prepare();
recorder.start();
// stop
recorder.stop();
recorder.reset();
recorder.release();
Run Code Online (Sandbox Code Playgroud)
您需要检查支持的媒体格式,以确定格式(音频编码器),容器(输出格式),采样率(通常以kHz为单位,但传递给MediaRecorder.setSamplingRate()仅为Hz)的正确匹配,以及位速率(通常以kbps为单位).请注意,并非文档中的所有格式都指定了比特率; 在这种情况下,使用上面代码中的方法应该对正确的比特率进行合理的猜测.
感谢@StarPinkER,@ PrvN,@arlomedia在这个SO答案中帮助我解决了这个问题.
小智 5
我使用了以下设置并获得了非常好的音频效果。
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setAudioEncodingBitRate(128000);
recorder.setAudioSamplingRate(96000);
| 归档时间: |
|
| 查看次数: |
7332 次 |
| 最近记录: |