Mega Code Archive

 
Categories / Android / Media
 

Record audio to 3gpp file

package app.test; import java.io.File; import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.view.View; public class Test extends Activity {     private MediaPlayer mediaPlayer;     private MediaRecorder recorder;     private String OUTPUT_FILE;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         OUTPUT_FILE = Environment.getExternalStorageDirectory() +                         "/recordaudio.3gpp";     }     public void doClick(View view) {       switch(view.getId()) {       case R.id.beginBtn:             try {                 beginRecording();             } catch (Exception e) {                 e.printStackTrace();             }             break;       case R.id.stopBtn:             try {                 stopRecording();             } catch (Exception e) {                 e.printStackTrace();             }             break;       case R.id.playRecordingBtn:             try {                 playRecording();             } catch (Exception e) {                 e.printStackTrace();             }             break;       case R.id.stopPlayingRecordingBtn:             try {                 stopPlayingRecording();             } catch (Exception e) {                 e.printStackTrace();             }       }     }     private void beginRecording() throws Exception {         killMediaRecorder();         File outFile = new File(OUTPUT_FILE);         if(outFile.exists()) {             outFile.delete();         }         recorder = new MediaRecorder();         recorder.setAudioSource(MediaRecorder.AudioSource.MIC);         recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);         recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);         recorder.setOutputFile(OUTPUT_FILE);         recorder.prepare();         recorder.start();     }     private void stopRecording() throws Exception {         if (recorder != null) {             recorder.stop();         }     }     private void killMediaRecorder() {         if (recorder != null) {             recorder.release();         }     }     private void killMediaPlayer() {         if (mediaPlayer != null) {             try {                 mediaPlayer.release();             } catch (Exception e) {                 e.printStackTrace();             }         }     }     private void playRecording() throws Exception {         killMediaPlayer();         mediaPlayer = new MediaPlayer();         mediaPlayer.setDataSource(OUTPUT_FILE);         mediaPlayer.prepare();         mediaPlayer.start();     }     private void stopPlayingRecording() throws Exception {         if(mediaPlayer != null) {             mediaPlayer.stop();         }     }     @Override     protected void onDestroy() {         super.onDestroy();         killMediaRecorder();         killMediaPlayer();     } } //main.xml <?xml version="1.0" encoding="utf-8"?> <!-- This file is /res/layout/record.xml --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical"     android:layout_width="fill_parent"  android:layout_height="fill_parent">   <Button android:id="@+id/beginBtn"  android:text="Begin Recording"     android:layout_width="fill_parent"  android:layout_height="wrap_content"     android:onClick="doClick" />   <Button android:id="@+id/stopBtn"  android:text="Stop Recording"     android:layout_width="fill_parent"  android:layout_height="wrap_content"     android:onClick="doClick" />   <Button android:id="@+id/playRecordingBtn" android:text="Play Recording"     android:layout_width="fill_parent"  android:layout_height="wrap_content"     android:onClick="doClick" />   <Button android:id="@+id/stopPlayingRecordingBtn"     android:text="Stop Playing Recording"     android:layout_width="fill_parent"  android:layout_height="wrap_content"     android:onClick="doClick" /> </LinearLayout>