2012-08-16 10 views
14

Ich baue eine Android-App, Feature von Erfassung von Ton über Mikrofon und spielt es über Kopfhörer. Dazu habe ich "AudioRecord" und "AudioTrack" verwendet. Im Folgenden ist ein Teil des Codes, die ich verwende, (nur für das Verständnis)Android: Record Sound im MP3-Format

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

Aber das Hauptproblem ist, dass ich eingehenden Sound im MP3-Format aufnehmen will? Bitte helfen Sie mir in diesem, ich werde wirklich schätzen ...

Vielen Dank im Voraus

Antwort

10

Hier am git Sie Quellcode für Mp3 Voice Recorder-Beispiel Android finden.

Checkout dieser Quellcode.

+0

Das ist wirklich eine gute Antwort und ich bin bereit, es zu akzeptieren, aber das Problem ist, dass es „Audiotrack“ betrifft, meine ich nach diesem Code, ich bin nicht in der Lage zu hören Ton im Kopfhörer. Können diese beiden Prozesse parallel sein, wie Sound mit "AudioTrack" abspielen und in MP3 aufnehmen? Danke für die Antwort – user609239

+0

Sie können Media Player Class verwenden, um es in Kopfhörer zu hören. –

+0

Ja, aber MediaPlayer ist nützlich nach Abschluss der Aufnahme, aber in diesem Fall ist die Anforderung zu spielen Ton und simultan es – user609239

0

Dies ist Arbeit für mich

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

Das nimmt nicht mp3 auf, nur die Erweiterung der Datei wird mo3 sein, nicht das Dateiformat. –

34

Es gibt eine Arbeit zum Speichern von MP3-Dateien mit MediaRecorder. Hier ist, wie:

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

Der wichtige Teil ist hier die setOuputFormat und die setAudioEncoder. Anscheinend zeichnet MediaRecorder mp3 auf, wenn Sie MediaRecorder.OutputFormat.MPEG_4 und MediaRecorder.AudioEncoder.AAC zusammen verwenden. Hoffe das hilft jemandem.

Natürlich, wenn Sie lieber die Audiorecorder-Klasse verwenden würde denken, dass ich den Quellcode Chirag unter unten stehendem Link sollte gut funktionieren - https://github.com/yhirano/Mp3VoiceRecorderSampleForAndroid (obwohl Sie müssen möglicherweise einige davon aus dem Japanischen ins Englische übersetzen)

Edit: Wie Bruno, und ein paar andere in den Kommentaren darauf hingewiesen, dies nicht codieren die Datei in MP3. Die Codierung ist immer noch AAC. Wenn Sie jedoch versuchen, einen Sound abzuspielen, der mit der Erweiterung .mp3 über den obigen Code gespeichert wurde, wird er trotzdem ohne Probleme wiedergegeben, da die meisten Medienplayer intelligent genug sind, um die tatsächliche Codierung zu erkennen.

+0

Ich bin überrascht, dass die meisten Entwickler nicht wissen, wie einfach es ist, mp3 aufzunehmen! Vielen Dank! – nat101

+0

Die Verwendung des AudioEnconder.ACC hat einige seltsame Effekte auf einigen Geräten ... aus irgendeinem Grund war die Aufnahme von Audio zu schnell auf einem Lenovo Tab3 mit Android 6.0. Ich benutzte MediaRecorder.AudioEncoder.AMR_NB und arbeitete gut für mich. – velval

+2

Sorry, aber das erzeugt keine MP3-kodierten Dateien. sie sind immer noch aac-codiert (zu meiner Galaxie s6) –

0

Setzen Sie Ihren outputformat des Rekorders als MediaRecorder.OutputFormat.DEFAULT. Ich habe das verwendet und die resultierende Audiodatei ist ein mp3.

+0

Hallo. Ich habe das ausprobiert und 'adb' das Ergebnis zu meinem Linux-Entwicklungs-Host gezogen. Datei in der resultierenden Datei gibt: /home/sjs/AudioDemo.mp3: ISO Media, MPEG v4 System, 3GPP. die Datei ist eine mp4-Datei. Gerät war ein Nexus 7 mit Android 6.0.1. Entschuldigung & danke. –

0

Dieser arbeitete für mich

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