Ch10 code
From SCMAD Book
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 // ... } }
