Android:以mp3格式录制声音

Android:以mp3格式录制声音,android,mp3,record,Android,Mp3,Record,我正在构建一个android应用程序,它的特点是通过麦克风捕捉声音并通过耳机播放。为此,我使用了“AudioRecord”和“AudioTrack”。以下是我正在使用的部分代码(仅供理解) 但主要的问题是我想用mp3格式录制传入的声音?请在这方面帮助我,我会非常感激 提前感谢在git上,您可以找到Android版Mp3语音录制器示例的源代码 这是源代码。这是我的工作 outputFile = Environment.getExternalStorageDirectory()

我正在构建一个android应用程序,它的特点是通过麦克风捕捉声音并通过耳机播放。为此,我使用了“AudioRecord”和“AudioTrack”。以下是我正在使用的部分代码(仅供理解)

但主要的问题是我想用mp3格式录制传入的声音?请在这方面帮助我,我会非常感激


提前感谢

在git上,您可以找到Android版Mp3语音录制器示例的源代码

这是源代码。

这是我的工作

outputFile = Environment.getExternalStorageDirectory()
            .getAbsolutePath() + "/myrecording.mp3";
    myAudioRecorder = new MediaRecorder();
    myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    myAudioRecorder.setOutputFile(outputFile);`
myAudioRecorder.prepare();
myAudioRecorder.start()`

使用MediaRecorder可以保存.mp3文件。以下是方法:

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setOutputFile(Environment.getExternalStorageDirectory()
        .getAbsolutePath() + "/myrecording.mp3");
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.prepare();
recorder.start();
这里的重要部分是
setOutFormat
setAudioEncoder
。显然,如果您同时使用
media recorder.OutputFormat.MPEG_4
media recorder.AudioEncoder.AAC
,media recorder会录制可播放的mp3。希望这对别人有帮助

当然,如果你想使用AudioRecorder类,我认为下面链接的源代码Chirag应该可以很好地工作(尽管你可能需要将其中一些从日语翻译成英语)


编辑:正如布鲁诺和其他一些人在评论中指出的那样,这不会将文件编码为MP3格式。编码仍然是AAC。但是,如果您尝试播放通过上述代码使用.mp3扩展名保存的声音,它仍然可以正常播放,因为大多数媒体播放器都足够智能,能够检测到真正的编码。

将录音机的
outputformat
设置为
MediaRecorder.outputformat.DEFAULT
。我用过这个,得到的音频文件是mp3。

这对我很有用

mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory()
    .getAbsolutePath() + "/record.mp3");
mediaRecorder.prepare();
mediaRecorder.start();

我知道这是个老问题。但是如果它能帮助我用android java完整录制应用程序演示创建一个存储库的人,那么输出文件就是一个mp3文件。 请记住,如果不需要请求用户权限,我将目标sdk设置为21。这仅用于演示目的。 你可以克隆并使用它

我使用的大部分代码都来自此回购协议:

我的演示回购:

这是一个非常好的答案,我准备接受它,但问题是它会影响“AudioTrack”,我的意思是使用此代码后,我无法在耳机中收听声音。这两个过程可以并行吗?比如使用“AudioTrack”播放声音并将其录制到mp3中?谢谢你的回答。你可以使用Media Player类在耳机中收听。是的,但Media Player在录制完成后很有用,但在这种情况下,要求播放声音并同时录制。据我所知,android 4岁以下儿童不允许你在录制时播放声音。该项目可能更好:,它没有日文字符。他们都使用mp3lame库。这不会录制mp3,只有文件的扩展名是mo3,而不是文件格式。我很惊讶,大多数开发人员都不知道录制mp3有多么容易!谢谢在某些设备上使用AudioEnconder.ACC会产生一些奇怪的效果…出于某种原因,我们在使用Android 6.0的联想Tab3上录制音频至fast。我最终使用了MediaRecorder.AudioEncoder.AMR_NB,对我来说效果很好。对不起,这不会生成MP3编码的文件。他们仍然是aac编码(在我的galaxy s6上的leaat)的家伙,仅仅因为你命名了MP3文件的扩展名,它就不是MP3!它是AAC编码的,不支持AAC的设备将不会播放它!因此,这不是一个解决办法,这不应该被投票!您将希望使用.m4a扩展-这是实际的扩展,在大多数平台(iOS、web)上都得到了广泛的接受。我尝试了这个,并将结果“adb拉”到我的linux开发主机上。结果文件中的文件给出了:/home/sjs/AudioDemo.mp3:ISO媒体、MPEG v4系统、3GPP。i、 e.该文件为mp4文件。该设备是运行安卓6.0.1的Nexus7。对不起,谢谢。
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory()
    .getAbsolutePath() + "/record.mp3");
mediaRecorder.prepare();
mediaRecorder.start();