首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在安卓系统中使用MediaRecoder录制高质量的音频?

如何在安卓系统中使用MediaRecoder录制高质量的音频?
EN

Stack Overflow用户
提问于 2019-07-02 13:59:27
回答 2查看 3.7K关注 0票数 0

我试着用媒体录音机在android上录制音频。它的工作罚款3gp音频,但当我尝试相同的代码与aac格式,它失败。(这是我的aac格式代码):

代码语言:javascript
复制
final String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.acc";
final MediaRecorder myAudioRecorder = new MediaRecorder();
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
        myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AAC_ADTS);
        myAudioRecorder.setOutputFile(outputFile);
MediaPlayer mediaPlayer = new MediaPlayer();
                    mediaPlayer.setDataSource(outputFile);
                    mediaPlayer.prepare();
                    mediaPlayer.start();

我已经添加了权限,并且使用按钮正确地触发了这些函数。我只编写了这里的主要代码,只是为了使它简单,,我的问题是:

用aac格式录制和播放声音的正确方法是什么?

在android中使用媒体记录器和媒体播放器录制和播放音频的最佳格式是什么?如何实现?我尝试使用3gp,但它提供低质量的声音。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-03 09:05:52

解决了

我终于找到了正确的工作解决方案,以便自己录制高质量的音频。以下是您需要做的一些修改,以获得高质量的录音:

使用.m4a扩展保存文件。final String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.m4a";和do

代码语言:javascript
复制
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setAudioEncodingBitRate(16*44100);
myAudioRecorder.setAudioSamplingRate(44100);

很多关于堆栈溢出的解决方案都建议使用.setAudioEncodingBiteRate(16),但是16太低了,没有意义。

资料来源:@Grant on stackoverflow very poor quality of audio recorded on my droidx using MediaRecorder, why?

编辑:我想保存带有.aac扩展名的文件的唯一原因是我认为.aac文件会更加清晰,但是由于我能够在没有.aac扩展名的情况下保存质量很好的文件,所以没有必要使用它。

票数 5
EN

Stack Overflow用户

发布于 2019-07-02 15:28:30

如果您使用的是audioRecord对象而不是mediaRecorder对象,那么您可以更自由地定制如何记录和编码来自麦克风的输出。

AudioRecord确实需要更长的时间来理解和实现,如果您想坚持使用mediaRecorder对象,那么我建议使用AAC_ADTS作为音频编码器,并允许outputFormat成为THREE_GPP。

否则,这可能会帮助您编码原始AAC文件:

How to generate the AAC ADTS elementary stream with Android MediaCodec

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56854199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档