2012-08-16 102 views
14

我正在構建一個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格式?請幫我在這,我會很感激......

由於提前

回答

10

這裏就混帳你可以找到的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

0

這對我來說

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

34

有一種解決方法可以使用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

0

將您的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

0

這爲我工作

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