I am trying to get the PCM data of the mp3 files being played by
Android system.

In the SDK I do not find any API of the Mediaplayer which lets me set
the data target (complement API of SetDataSource()) so that I can give
the path of a simple file in which I want to write the PCM data before
it is being played on the DAC of my system.

I thought of another way for the solution. Instead of setting the data
target if I am able to use the MediaRecoder to record the PCM data of
the file being played on the DAC of the emulator I would be able to
achieve the desired result in other way; But the Problem which I am
finding in this approach is what to set the data source to the
mediarecoder? If I set MIC I get an exception.

Here is the code :-

===============================> CODE STARTS  <=====================
public class Hello extends Activity
{
       //All buttons
       private static final String LOG_TAG = "AudioRecordTest";
   private static String mFileName = null;
   private RecordButton mRecordButton = null;
   private MediaRecorder mRecorder = null;
   private PlayButton   mPlayButton = null;
   private MediaPlayer   mPlayer = null;

   private void onRecord(boolean start) {
       if (start) {
           startRecording();
       } else {
           stopRecording();
       }
   }

   private void onPlay(boolean start) {
       if (start) {
           startPlaying();
       } else {
           stopPlaying();
       }
   }

   private void startPlaying() {
       mPlayer = new MediaPlayer();
       try {
           mPlayer.setDataSource(mFileName);
           mPlayer.prepare();
           mPlayer.start();
       } catch (IOException e) {
           Log.e(LOG_TAG, "prepare() failed");
       }
   }

   private void stopPlaying() {
       mPlayer.release();
       mPlayer = null;
   }

   private void startRecording() {
       mRecorder = new MediaRecorder();
       mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
       mRecorder.setOutputFile(mFileName);
       mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

       try {
           mRecorder.prepare();
       } catch (IOException e) {
           Log.e(LOG_TAG, "prepare() failed");
       }

       mRecorder.start();
   }

   private void stopRecording() {
       mRecorder.stop();
       mRecorder.release();
       mRecorder = null;
   }

   class RecordButton extends Button {
       boolean mStartRecording = true;

       OnClickListener clicker = new OnClickListener() {
           public void onClick(View v) {
               onRecord(mStartRecording);
               if (mStartRecording) {
                   setText("Stop recording");
               } else {
                   setText("Start recording");
               }
               mStartRecording = !mStartRecording;
           }
       };

       public RecordButton(Context ctx) {
           super(ctx);
           setText("Start recording");
           setOnClickListener(clicker);
       }
   }

   class PlayButton extends Button {
       boolean mStartPlaying = true;

       OnClickListener clicker = new OnClickListener() {
           public void onClick(View v) {
               onPlay(mStartPlaying);
               if (mStartPlaying) {
                   setText("Stop playing");
               } else {
                   setText("Start playing");
               }
               mStartPlaying = !mStartPlaying;
           }
       };

       public PlayButton(Context ctx) {
           super(ctx);
           setText("Start playing");
           setOnClickListener(clicker);
       }
   }

   //public AudioRecordTest() {
   public Hello() {
       mFileName =
Environment.getExternalStorageDirectory().getAbsolutePath();
       mFileName += "/audiorecordtest.3gp";
   }

   @Override
   public void onCreate(Bundle icicle) {
       super.onCreate(icicle);

       LinearLayout ll = new LinearLayout(this);
       mRecordButton = new RecordButton(this);
       ll.addView(mRecordButton,
           new LinearLayout.LayoutParams(
               ViewGroup.LayoutParams.WRAP_CONTENT,
               ViewGroup.LayoutParams.WRAP_CONTENT,
               0));
       mPlayButton = new PlayButton(this);
       ll.addView(mPlayButton,
           new LinearLayout.LayoutParams(
               ViewGroup.LayoutParams.WRAP_CONTENT,
               ViewGroup.LayoutParams.WRAP_CONTENT,
               0));
       setContentView(ll);
   }

   @Override
   public void onPause() {
       super.onPause();
       if (mRecorder != null) {
           mRecorder.release();
           mRecorder = null;
       }

       if (mPlayer != null) {
           mPlayer.release();
           mPlayer = null;
       }
   }

}

======================> CODE ENDS  < ===================

Kindly help me in getting the PCM data of the mp3 files being played.
Also I would like to know how to get the SampleRate etc. in order to
get the PCM data thus obtained? .i.e How to determine the playing
params of a PCM file?

Thanks!!

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to