J2ME Java Tutorial

import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Gauge;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.media.control.PitchControl;
import javax.microedition.media.control.TempoControl;
import javax.microedition.media.control.VolumeControl;
import javax.microedition.midlet.MIDlet;
public class ControllableMIDIMIDlet extends MIDlet implements ItemStateListener {
  Player midiPlayer = null;
  VolumeControl volControl = null;
  PitchControl pitchControl = null;
  TempoControl tempoControl = null;
  Form form = new Form("MIDI Player", null);
  Gauge volGauge = new Gauge("Volume: 50", true, 100, 50);
  Gauge pitchGauge = new Gauge("Pitch: 0", true, 10, 5);
  Gauge tempoGauge = new Gauge("Tempo: 120", true, 30, 12);
  public ControllableMIDIMIDlet() {
    try {
      midiPlayer = Manager.createPlayer(getClass().getResourceAsStream("/a.mid"), "audio/midi");
      midiPlayer.prefetch();
      volControl = (VolumeControl) midiPlayer.getControl("javax.microedition.media.control.VolumeControl");
      pitchControl = (PitchControl) midiPlayer.getControl("javax.microedition.media.control.PitchControl");
      tempoControl = (TempoControl) midiPlayer.getControl("javax.microedition.media.control.TempoControl");
      form.append(volGauge);
      form.append(tempoGauge);
      form.append(pitchGauge);
      form.setItemStateListener(this);
      Display.getDisplay(this).setCurrent(form);
    } catch (Exception e) {
      System.err.println(e);
    }
  }
  public void itemStateChanged(Item item) {
    if (!(item instanceof Gauge))
      return;
    Gauge gauge = (Gauge) item;
    int val = gauge.getValue();
    if (item == volGauge) {
      volControl.setLevel(val);
      volGauge.setLabel("Volume: " + val);
    }
    if (item == tempoGauge && tempoControl != null) {
      tempoControl.setTempo((val) * 10 * 1000);
      tempoGauge.setLabel("Tempo: " + (val * 10));
    }
    if (item == pitchGauge && pitchControl != null) {
      pitchControl.setPitch((val - 5) * 12 * 1000);
      pitchGauge.setLabel("Pitch: " + (val - 5));
    }
  }
  public void startApp() {
    try {
      if (midiPlayer != null) {
        midiPlayer.start();
      }
    } catch (Exception e) {
      System.err.println(e);
    }
  }
  public void pauseApp() {
    try {
      if (midiPlayer != null) {
        midiPlayer.stop();
      }
    } catch (Exception e) {
      System.err.println(e);
    }
  }
  public void destroyApp(boolean unconditional) {
    try {
      if (midiPlayer != null) {
        midiPlayer.close();
      }
    } catch (Exception e) {
      System.err.println(e);
    }
  }
}