我试着用媒体录音机在android上录制音频。它的工作罚款3gp音频,但当我尝试相同的代码与aac格式,它失败。(这是我的aac格式代码):
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,但它提供低质量的声音。
发布于 2019-07-03 09:05:52
解决了
我终于找到了正确的工作解决方案,以便自己录制高质量的音频。以下是您需要做的一些修改,以获得高质量的录音:
使用.m4a扩展保存文件。final String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.m4a";和do
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扩展名的情况下保存质量很好的文件,所以没有必要使用它。
发布于 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
https://stackoverflow.com/questions/56854199
复制相似问题