Android:以mp3格式录制声音

问题描述:

我正在构建一个android应用程序,具有通过麦克风捕获声音并通过耳机播放的功能。为此,我使用了“AudioRecord”和“AudioTrack”。以下是一些代码的一部分,我使用,(只是为了理解)Android:以mp3格式录制声音

mInBufferSize = AudioRecord.getMinBufferSize(mSampleRate, 
      AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat); 
mOutBufferSize = AudioTrack.getMinBufferSize(mSampleRate, 
      AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat); 
mAudioInput = new AudioRecord(MediaRecorder.AudioSource.MIC, 
      mSampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat, 
      mInBufferSize); 
mAudioOutput = new AudioTrack(AudioManager.STREAM_MUSIC, mSampleRate, 
      AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat, 
      mOutBufferSize, AudioTrack.MODE_STREAM); 

但主要的问题是,我想记录传入的声音的MP3格式?请帮我在这,我会很感激......

由于提前

这里就混帐你可以找到的MP3录音采样对于Android源代码。

Checkout此源代码。

+0

这真的不好回答,我很愿意接受它,但问题是,它影响“AudioTrack”,我的意思是使用此代码后,我不能听声音在耳机。这两个过程是否可以相互配合?就像使用“AudioTrack”播放声音并将其录制到mp3中一样?感谢您的回答 – user609239 2012-08-16 12:59:25

+0

您可以使用Media Player Class在耳机中收听。 – 2012-08-16 13:00:48

+0

是的,但是MediaPlayer在完成录制后很有用,但是在这种情况下,要求是播放声音并且同步录制它 – user609239 2012-08-16 13:15:28

这对我来说

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();`

+2

这不记录mp3,只有文件的扩展名将是mo3,而不是文件格式。 – 2015-05-25 11:53:39

有一种解决方法可以使用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(); 

最重要的这里部分是setOuputFormatsetAudioEncoder。如果您将MediaRecorder.OutputFormat.MPEG_4MediaRecorder.AudioEncoder.AAC放在一起,显然MediaRecorder会记录可播放的mp3。希望这有助于某人。

当然,如果你想用的AudioRecorder类,我认为下面链接的源代码奇拉格应该只是罚款 - https://github.com/yhirano/Mp3VoiceRecorderSampleForAndroid(尽管你可能需要从日本翻译它的一些英语)

编辑:由于布鲁诺和其他一些人在评论中指出,没有编码该文件在MP3中。编码仍然是AAC。但是,如果尝试播放声音,并通过上面的代码使用.mp3扩展名保存,则它仍然可以毫无问题地播放,因为大多数媒体播放器都足够智能以检测真实编码。

+0

我很惊讶,大多数开发人员都不知道如何轻松录制MP3!谢谢! – nat101 2016-01-03 18:48:27

+0

使用AudioEnconder.ACC在某些设备上有一些奇怪的效果......出于某种原因,在Android 6.0版本的联想Tab3上录制音频的速度很快。我结束了使用MediaRecorder.AudioEncoder.AMR_NB并为我工作得很好。 – velval 2016-05-23 04:11:27

+2

对不起,但这不会产生MP3编码的文件。它们仍然是aac编码的(在我的银河系s6上), – 2017-02-02 10:31:47

将您的outputformat设置为MediaRecorder.OutputFormat.DEFAULT。我已经使用过这个,最终的音频文件是一个mp3。

+0

嗨。我试过这个,'adb将结果拉到我的linux开发主机上。生成文件中的文件给出:/home/sjs/AudioDemo.mp3:ISO Media,MPEG v4系统,3GPP。即该文件是一个mp4文件。设备是运行Android 6.0.1的Nexus 7。对不起,谢谢。 – 2016-06-20 22:31:25

这为我工作

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();