Rebuilding SoundPlayer Example in Straight Android

A lot of the code that we used for various media related programs with Processing for Android are able to be used with very little modification in regular Android.

For instance, in our Audio Playback using MediaPlayer example we have the following class:

class SoundPlayer extends Object  implements android.media.MediaPlayer.OnCompletionListener {

  android.media.MediaPlayer mediaPlayer;
  android.content.res.AssetFileDescriptor assetFileDescriptor;
  processing.core.PApplet theSketch;

  boolean ready = false;

  public SoundPlayer(PApplet _theSketch, String assetAudioFile) {
    theSketch = _theSketch;

    try {
      assetFileDescriptor = theSketch.getAssets().openFd(assetAudioFile);

      mediaPlayer = new android.media.MediaPlayer();
      mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(),assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());
      mediaPlayer.setOnCompletionListener(this);
      mediaPlayer.prepare();
      ready = true;
    } catch (Exception e) {
      theSketch.println(e.toString());
    }
  }

  public SoundPlayer(PApplet _theSketch, java.io.File _audioFile) {
    this(_theSketch, android.net.Uri.fromFile(_audioFile));
  }

  public SoundPlayer(PApplet _theSketch, android.net.Uri _audioFileUri) {
    theSketch = _theSketch;
    theSketch.println("The Uri: " + _audioFileUri.toString());
    try {
      mediaPlayer = android.media.MediaPlayer.create(_theSketch, _audioFileUri);
      mediaPlayer.setOnCompletionListener(this);
      ready = true;
    } catch (Exception e) {
      theSketch.println(e.toString());
      e.printStackTrace();

    }
  }

  public void play() {
    if (ready) {
      try {
        theSketch.println("playSound");
        mediaPlayer.start();
        ready = false;
      } catch (Exception e) {
        theSketch.println(e.toString());
        e.printStackTrace();
      }
    }
  }

  public void onCompletion(android.media.MediaPlayer mp) {
    try {
      theSketch.println("Trying to prepare");
      mediaPlayer.stop();
      mediaPlayer.prepare();
      ready = true;
    }
    catch (Exception e) {
      theSketch.println(e.toString());
      e.printStackTrace();
    }
  }
}

Using this in Eclipse requires us to create a new Java Class with the above contents. We can even make it a bit nicer by using import statements. Also, we’ll have to remove references to the Processing constructs such as the PApplet (theSketch object). In the below code, the Processing println methods have been changed to Log.v

package com.mobvcasting.simpleaudioplayer;

import android.media.MediaPlayer;
import android.util.Log;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;

class SoundPlayer extends Object  implements android.media.MediaPlayer.OnCompletionListener {

	  public static final String LOGTAG = "SoundPlayer";
	
	  MediaPlayer mediaPlayer;
	  AssetFileDescriptor assetFileDescriptor;
	  Activity theActivity;

	  boolean ready = false;

	  public SoundPlayer(Activity _theActivity, String assetAudioFile) {
	    theActivity = _theActivity;

	    try {
	      assetFileDescriptor = theActivity.getAssets().openFd(assetAudioFile);

	      mediaPlayer = new android.media.MediaPlayer();
	      mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(),assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());
	      mediaPlayer.setOnCompletionListener(this);
	      mediaPlayer.prepare();
	      ready = true;
	    } catch (Exception e) {
	      Log.v(LOGTAG,"e.toString()");
	    }
	  }

	  public SoundPlayer(Activity _theActivity, java.io.File _audioFile) {
	    this(_theActivity, android.net.Uri.fromFile(_audioFile));
	  }

	  public SoundPlayer(Activity _theActivity, android.net.Uri _audioFileUri) {
	    theActivity = _theActivity;
	    Log.v(LOGTAG,"The Uri: " + _audioFileUri.toString());
	    try {
	      mediaPlayer = android.media.MediaPlayer.create(_theActivity, _audioFileUri);
	      mediaPlayer.setOnCompletionListener(this);
	      ready = true;
	    } catch (Exception e) {
	      Log.v(LOGTAG,e.toString());
	      e.printStackTrace();

	    }
	  }

	  public void play() {
	    if (ready) {
	      try {
	        Log.v(LOGTAG,"playSound");
	        mediaPlayer.start();
	        ready = false;
	      } catch (Exception e) {
	        Log.v(LOGTAG,e.toString());
	        e.printStackTrace();
	      }
	    }
	  }

	  public void onCompletion(android.media.MediaPlayer mp) {
	    try {
	      Log.v(LOGTAG,"Trying to prepare");
	      mediaPlayer.stop();
	      mediaPlayer.prepare();
	      ready = true;
	    }
	    catch (Exception e) {
	      Log.v(LOGTAG,e.toString());
	      e.printStackTrace();
	    }
	  }
	}

Here is a full example