Pages

Tuesday, 30 April 2013

Audio Recorder in Android


The android.media.AudioRecord class manages the audio resources for Java applications to record audio from the audio input hardware of the platform.



record.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="HB-Record Audio" />

    <Button
        android:id="@+id/startrec"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Start Recording" />

    <Button
        android:id="@+id/stoprec"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Stop Recording" />

    <Button
        android:id="@+id/playback"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Play Back" />

</LinearLayout>


AndroidAudioRecordActivity:

public class AndroidAudioRecordActivity extends Activity
{

      Button startRecstopRecplayBack;
      Boolean recording;
     
      @Override
      public void onCreate(Bundle savedInstanceState)
      {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.record);
           
            startRec = (Button)findViewById(R.id.startrec);
            stopRec = (Button)findViewById(R.id.stoprec);
            playBack = (Button)findViewById(R.id.playback);

            startRec.setOnClickListener(startRecOnClickListener);
            stopRec.setOnClickListener(stopRecOnClickListener);
            playBack.setOnClickListener(playBackOnClickListener);

      }

      OnClickListener startRecOnClickListener   = new OnClickListener()
      {
            @Override
            public void onClick(View arg0)
            {
                  Thread recordThread = new Thread(new Runnable()
                  {
                        @Override
                        public void run()
                        {
                              recording = true;
                              startRecord();
                        }

                  });

                  recordThread.start();
            }};

            OnClickListener stopRecOnClickListener = new OnClickListener()
            {
                  @Override
                  public void onClick(View arg0)
                  {
                        recording = false;
                  }};

                  OnClickListener playBackOnClickListener   = new OnClickListener()
                  {

                        @Override
                        public void onClick(View v)
                        {
                              playRecord();
                        }

                  };

                  private void startRecord()
                  { 
                        File file = new File(Environment.getExternalStorageDirectory(),"test.pcm");

                        try
                        {
                              file.createNewFile();

                              OutputStream outputStream = new FileOutputStream(file);
                              BufferedOutputStream bufferedOutputStream = newBufferedOutputStream(outputStream);
                              DataOutputStream dataOutputStream = newDataOutputStream(bufferedOutputStream);

                              int minBufferSize = AudioRecord.getMinBufferSize(11025,
                                          AudioFormat.CHANNEL_CONFIGURATION_MONO,
                                          AudioFormat.ENCODING_PCM_16BIT);

                              short[] audioData = new short[minBufferSize];

                              AudioRecord audioRecord = newAudioRecord(MediaRecorder.AudioSource.MIC,
                                          11025,
                                          AudioFormat.CHANNEL_CONFIGURATION_MONO,
                                          AudioFormat.ENCODING_PCM_16BIT,
                                          minBufferSize);

                              audioRecord.startRecording();

                              while(recording)
                              {
                                    int numberOfShort = audioRecord.read(audioData, 0, minBufferSize);
                                    for(int i = 0; i < numberOfShort; i++)
                                    {
                                          dataOutputStream.writeShort(audioData[i]);
                                    }
                              }
                              audioRecord.stop();
                              dataOutputStream.close();

                        }
                        catch (IOException e)
                        {
                              e.printStackTrace();
                        }

                  }

                  void playRecord()
                  {
                        File file = new File(Environment.getExternalStorageDirectory(),"test.pcm");

                        int shortSizeInBytes = Short.SIZE/Byte.SIZE;

                        int bufferSizeInBytes = (int)(file.length()/shortSizeInBytes);
                        short[] audioData = new short[bufferSizeInBytes];

                        try {
                              InputStream inputStream = new FileInputStream(file);
                              BufferedInputStream bufferedInputStream = newBufferedInputStream(inputStream);
                              DataInputStream dataInputStream = newDataInputStream(bufferedInputStream);

                              int i = 0;
                              while(dataInputStream.available() > 0)
                              {
                                    audioData[i] = dataInputStream.readShort();
                                    i++;
                              }

                              dataInputStream.close();

                              AudioTrack audioTrack = new AudioTrack(
                                          AudioManager.STREAM_MUSIC,
                                          11025,
                                          AudioFormat.CHANNEL_CONFIGURATION_MONO,
                                          AudioFormat.ENCODING_PCM_16BIT,
                                          bufferSizeInBytes,
                                          AudioTrack.MODE_STREAM);

                              audioTrack.play();
                              audioTrack.write(audioData, 0, bufferSizeInBytes);


                        } catch (FileNotFoundException e)
                        {
                              e.printStackTrace();
                        } catch (IOException e)
                        {
                              e.printStackTrace();
                        }
                  } 
}

Permission:
  <uses-permission android:name="android.permission.RECORD_AUDIO" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Click here for more ref Link:

No comments:

Post a Comment