Ch10 code

From SCMAD Book

Jump to: navigation, search

Contents

Generating simple tones (Listing 10.1)

package com.scmadkit.ch10;
 
import javax.microedition.midlet.*;
import javax.microedition.media.*;
import javax.microedition.media.control.ToneControl;
 
public class SimpleToneMIDlet extends MIDlet {
	protected void startApp() {
		try {
			Manager.playTone(ToneControl.C4, 5000, 100);
		} catch (MediaException me) {
			me.printStackTrace();
		}
	}
 
	protected void pauseApp() {
	}
 
	protected void destroyApp(boolean _boolean) {
	}
}

Generating tone from an Input Stream (Listing 10.2)

package com.scmadkit.ch10;
 
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.media.*;
 
public class InputStreamToneMIDlet extends MIDlet {
	protected void startApp() {
		/**
		 * Notice that in MIDP 2.0, the wav format is mandatory only in the case
		 * that the device supports sampled audio.
		 */
		try {
			InputStream is = getClass().getResourceAsStream("/audio.wav");
			Player p = Manager.createPlayer(is, "audio/X-wav");
			p.start();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (MediaException me) {
			me.printStackTrace();
		}
	}
 
	protected void pauseApp() {
	}
 
	protected void destroyApp(boolean _boolean) {
	}
}

Genarating tones from an RMS record (Listing 10.3)

package com.scmadkit.ch10;
 
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
 
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.midlet.MIDlet;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
 
public class RMSToneMIDlet extends MIDlet {
	protected void startApp() {
		try {
			RecordStore rs = null;
			int recordId = 0;
 
			// ...
			// Initiates the record store
			// Initiates the record id
			// ...
 
			InputStream is = new ByteArrayInputStream(rs.getRecord(recordId));
			Player p = Manager.createPlayer(is, "audio/X-wav");
			p.start();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (MediaException me) {
			me.printStackTrace();
		} catch (RecordStoreException rse) {
			rse.printStackTrace();
		}
	}
 
	protected void pauseApp() {
	}
 
	protected void destroyApp(boolean _boolean) {
	}
}

Synchronizing players using TimeBase (Listing 10.4)

package com.scmadkit.ch10;
 
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.media.*;
 
public class TimeBaseToneMIDlet extends MIDlet {
	protected void startApp() {
		Player p1, p2;
		try {
			p1 = Manager.createPlayer("http://localhost:8080/audio.mid");
			p1.realize();
 
			p2 = Manager.createPlayer("http://localhost:8080/video.mpg");
			p2.realize();
 
			p2.setTimeBase(p1.getTimeBase());
 
			p1.prefetch();
			p2.prefetch();
			p1.start();
			p2.start();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (MediaException me) {
			me.printStackTrace();
		}
	}
 
	protected void pauseApp() {
	}
 
	protected void destroyApp(boolean _boolean) {
	}
}

Playing media in a loop (Listing 10.5)

package com.scmadkit.ch10;
 
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.media.*;
 
public class LoopToneMIDlet extends MIDlet {
	protected void startApp() {
		try {
			Player p = Manager.createPlayer("http://localhost:8080/audio.wav");
			p.setLoopCount(5);
			p.start();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (MediaException me) {
			me.printStackTrace();
		}
	}
 
	protected void pauseApp() {
	}
 
	protected void destroyApp(boolean _boolean) {
	}
}

Playing audio content using MMAPI (Listing 10.6)

package com.scmadkit.ch10;
 
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
 
public class AudioPlayerMIDlet extends MIDlet {
	static final long SECS_TO_MICROSECS = 1000000L;
 
	protected void startApp() {
		try {
			/* Creates a player */
			Player p = Manager.createPlayer("http://localhost:8080/world.mid");
			p.realize();
 
			p.addPlayerListener(new MyListener());
 
			VolumeControl vc = (VolumeControl) p.getControl("VolumeControl");
			if (vc != null)
				vc.setLevel(100);
 
			p.setMediaTime(10 * AudioPlayerMIDlet.SECS_TO_MICROSECS);
 
			/**
			 * Guarantees that the player can start with the smallest latency
			 **/
			p.prefetch();
 
			/* Non-blocking start */
			p.start();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (MediaException me) {
			me.printStackTrace();
		}
	}
 
	protected void pauseApp() {
	}
 
	protected void destroyApp(boolean _boolean) {
	}
}
 
class MyListener implements PlayerListener {
	public void playerUpdate(Player p, String event, Object data) {
		if (event == PlayerListener.END_OF_MEDIA) {
			System.out.println("Done processing!");
			try {
				p.setMediaTime(5 * AudioPlayerMIDlet.SECS_TO_MICROSECS);
				p.start();
			} catch (MediaException me) {
				me.printStackTrace();
			}
		}
	}
}

Playing video content using MMAPI (Listing 10.7)

package com.scmadkit.ch10;
 
import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
 
public class VideoPlayerMIDlet extends MIDlet {
	protected void startApp() {
		try {
			Player p = Manager.createPlayer("http://localhost:8080/lions.mpg");
			p.realize();
 
			VideoControl vc = (VideoControl) p.getControl("VideoControl");
			if (vc != null) {
				Form form = new Form("video");
				form.append((Item) vc.initDisplayMode(vc.USE_GUI_PRIMITIVE,
						null));
				Display.getDisplay(this).setCurrent(form);
			}
 
			/* Non-blocking start */
			p.start();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (MediaException me) {
			me.printStackTrace();
		}
	}
 
	protected void pauseApp() {
	}
 
	protected void destroyApp(boolean _boolean) {
	}
}

Playing MIDI files (Listing 10.8)

package com.scmadkit.ch10;
 
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.media.*;
import javax.microedition.media.control.TempoControl;
 
public class MIDIPlayerMIDlet extends MIDlet {
	protected void startApp() {
		try {
			Player p = Manager.createPlayer("http://localhost:8080/world.mid");
			p.realize();
 
			// Grab the tempo control.
			TempoControl tc = (TempoControl) p.getControl("TempoControl");
			tc.setTempo(300000); // 300 beats/min
			p.start();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (MediaException me) {
			me.printStackTrace();
		}
	}
 
	protected void pauseApp() {
	}
 
	protected void destroyApp(boolean _boolean) {
	}
}

Generating tone sequences (Listing 10.9)

package com.scmadkit.ch10;
 
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.media.*;
import javax.microedition.media.control.ToneControl;
 
public class ToneSequenceMIDlet extends MIDlet {
	protected void startApp() {
		/**
		 * "Mary Had A Little Lamb" has "ABAC" structure. and the tone sequence
		 * uses block to repeat "A" section.
		 */
 
		/* set tempo to 30 bpm */
		byte tempo = 30;
 
		byte d = 8; // eighth-note
		byte C4 = ToneControl.C4;
		; // a middle C
		byte D4 = (byte) (C4 + 2); // a whole step
		byte E4 = (byte) (C4 + 4); // a major third
		byte G4 = (byte) (C4 + 7); // a fifth
		byte rest = ToneControl.SILENCE; // rest
 
		byte[] mySequence = { ToneControl.VERSION, 1, // version 1
				ToneControl.TEMPO, tempo, // set tempo
				ToneControl.BLOCK_START, 0, // start define "A" section
				E4, d, D4, d, C4, d, E4, d, // content of "A" section
				E4, d, E4, d, E4, d, rest, d, ToneControl.BLOCK_END, 0, // end
																		// define
																		// "A"
																		// section
				ToneControl.PLAY_BLOCK, 0, // play "A" section
				D4, d, D4, d, D4, d, rest, d, // play "B" section
				E4, d, G4, d, G4, d, rest, d, ToneControl.PLAY_BLOCK, 0, // repeat
																			// "A"
																			// section
				D4, d, D4, d, E4, d, D4, d, C4, d // play "C" section
		};
 
		try {
			Player p = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
			p.realize();
 
			ToneControl c = (ToneControl) p.getControl("ToneControl");
			c.setSequence(mySequence);
 
			p.start();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (MediaException me) {
			me.printStackTrace();
		}
	}
 
	protected void pauseApp() {
	}
 
	protected void destroyApp(boolean _boolean) {
	}
}

Getting a video snapshot (Listing 10.10)

package com.scmadkit.ch10;
 
import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.media.*;
import javax.microedition.media.control.VideoControl;
 
public class VideoSnapshotMIDlet extends MIDlet {
	protected void startApp() {
		try {
			Player p = Manager.createPlayer("http://localhost:8080/lion.mpg");
			p.realize();
 
			Form form = new Form("video");
			VideoControl vc = (VideoControl) p.getControl("VideoControl");
			if (vc != null) {
				form.append((Item) vc.initDisplayMode(vc.USE_GUI_PRIMITIVE,
						null));
				Display.getDisplay(this).setCurrent(form);
			}
 
			p.start();
 
			Thread.currentThread().sleep(5000);
			byte[] pngImage = vc.getSnapshot(null);
			doSomethingWithImage(pngImage);
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (MediaException me) {
			me.printStackTrace();
		} catch (InterruptedException ie) {
			ie.printStackTrace();
		}
	}
 
	protected void pauseApp() {
	}
 
	protected void destroyApp(boolean _boolean) {
	}
 
	private void doSomethingWithImage(byte[] pngImage) {
		// Do something with the retrieved image
		// ...
	}
}
Personal tools