Mega Code Archive

 
Categories / Java Tutorial / J2ME
 

Cached Audio Player

import java.util.Enumeration; import java.util.Hashtable; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Gauge; import javax.microedition.lcdui.Item; import javax.microedition.lcdui.ItemStateListener; import javax.microedition.lcdui.List; import javax.microedition.media.Manager; import javax.microedition.media.Player; import javax.microedition.media.control.VolumeControl; import javax.microedition.midlet.MIDlet; class CachedAudioPlayerCanvas implements ItemStateListener {   private CachingAudioPlayer parent;   private Form form = new Form("");   private Gauge gauge = new Gauge("Volume: 50", true, 100, 50);   private VolumeControl volume;   private Player player;   private boolean paused = false;   private Hashtable players = new Hashtable();   public CachedAudioPlayerCanvas(CachingAudioPlayer parent) {     this.parent = parent;     form.append(gauge);     form.addCommand(parent.exitCommand);     form.addCommand(parent.backCommand);     form.setCommandListener(parent);     form.setItemStateListener(this);   }   public void playMedia(String locator) {     try {       player = (Player) players.get(locator);       if (player == null) {         player = Manager.createPlayer(getClass().getResourceAsStream(locator), "audio/x-wav");         player.prefetch();         players.put(locator, player);       }       volume = (VolumeControl) player.getControl("VolumeControl");       volume.setLevel(50);       gauge.setValue(volume.getLevel());       gauge.setLabel("Volume: " + volume.getLevel());       player.setLoopCount(2);       player.start();       form.setTitle("Playing " + locator);     } catch (Exception e) {       e.printStackTrace();     }   }   public void pauseMedia() {     if (player != null) {       try {         player.stop();         paused = true;       } catch (Exception e) {       }     }   }   public void restartMedia() {     if (player != null) {       try {         player.start();         paused = false;       } catch (Exception e) {       }     }   }   public boolean isPlayerPaused() {     return paused;   }   public Form getForm() {     return this.form;   }   public void itemStateChanged(Item item) {     volume.setLevel(gauge.getValue());     gauge.setLabel("Volume: " + volume.getLevel());   }   public void cleanUp() {     if (player != null) {       try {         player.setMediaTime(0);       } catch (Exception e) {       }       player.deallocate();       player = null;     }   }   public void closeAll() {     for (Enumeration e = players.elements(); e.hasMoreElements();) {       Player p = (Player) e.nextElement();       p.close();     }   } } public class J2MECachingAudioPlayer extends MIDlet implements CommandListener {   private String[] audioDisplayList = { "B", "A", "L" };   private String[] audioList = { "/b.wav", "/a.wav", "/l.wav" };   protected Display display;   private CachedAudioPlayerCanvas canvas;   private List list = new List("Pick an Audio file", List.IMPLICIT, audioDisplayList, null);   protected Command exitCommand = new Command("Exit", Command.EXIT, 1);   protected Command backCommand = new Command("Back", Command.BACK, 1);   public J2MECachingAudioPlayer() {     list.addCommand(exitCommand);     list.setCommandListener(this);     canvas = new CachedAudioPlayerCanvas(this);     display = Display.getDisplay(this);   }   public void startApp() {     if (canvas.isPlayerPaused()) {       canvas.restartMedia();       display.setCurrent(canvas.getForm());     } else {       display.setCurrent(list);     }   }   public void pauseApp() {     canvas.pauseMedia();   }   public void destroyApp(boolean unconditional) {     canvas.closeAll();   }   public void commandAction(Command command, Displayable disp) {     if (command == exitCommand) {       canvas.closeAll();        notifyDestroyed();        return;     } else if (command == backCommand) {       canvas.cleanUp();       display.setCurrent(list);       return;     }   } }