www.pudn.com > Bluegammon蓝牙的应用编程.rar > Audio.java
// Copyright (c) 2005 Sony Ericsson Mobile Communications AB // // This software is provided "AS IS," without a warranty of any kind. // ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, // INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A // PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. // // THIS SOFTWARE IS COMPLEMENTARY OF JAYWAY AB (www.jayway.se) package bluegammon; import java.io.IOException; import javax.microedition.media.Manager; import javax.microedition.media.MediaException; import javax.microedition.media.Player; /** ** Audio manager. Contains one player for each sound. *
* Implementation note: the format of the sound is hardcoded * in method
* * @author Peter Andersson */ public class Audio { /** Jazzy background music */ public static final int MUSIC = 0; /** Dices hitting board, long sound */ public static final int DICES_LONG = 1; /** Dices hitting board, short sound */ public static final int DICES_SHORT = 2; /** Piece sound */ public static final int PIECE = 3; /** Message sound */ public static final int MESSAGE = 4; /** Connection failed sound */ public static final int CONN_FAIL = 5; /** Winner sound */ public static final int WINNER = 6; /** Loser sound */ public static final int LOSER = 7; /** The media players */ protected static Player[] m_sounds = new Player[8]; /** Current playing player index */ protected static int m_currentPlayer = -1; protected static final String TYPE_AMR = "audio/amr"; protected static final String TYPE_MIDI = "audio/midi"; /** * Starts playing specified sound, one ofplaySound. *Audio.MUSIC, *Audio.DICES_LONG,Audio.DICES_SHORT, *Audio.PIECE. If there is another sound playing, * it is stopped. * @param snd The id of the sound to play. */ public synchronized static void playSound(int snd) { // Start sound if (!RmsFacade.getBoolean(Bluegammon.AUDIO_OFF)) { // No player, create one if (m_sounds[snd] == null) { createSound(snd); } // Start player Player player = m_sounds[snd]; if (player != null) { try { player.start(); m_currentPlayer = snd; } catch (MediaException e) { e.printStackTrace(); } } } } /** * Stops specified sound if it is playing. * @param snd The id of the sound to stop. */ public synchronized static void stopSound(int snd) { if (m_sounds[snd] != null) { try { m_sounds[snd].stop(); } catch (MediaException e) { e.printStackTrace(); } } } /** * Stops all sounds and cleans up resources. */ public static void shutdown() { for (int i = 0; i < m_sounds.length; i++) { stopSound(i); if (m_sounds[i] != null) { m_sounds[i].deallocate(); } } } /** * Creates a player for specified sound * and popuplates the Player array. * @param snd The sound to create */ protected static void createSound(int snd) { try { int rsc = 0; String type = TYPE_AMR; switch(snd) { case MUSIC: type = TYPE_MIDI; rsc = Resources.SND_JAZZY; break; case MESSAGE: type = TYPE_MIDI; rsc = Resources.SND_MESSAGE; break; case CONN_FAIL: type = TYPE_MIDI; rsc = Resources.SND_CONNFAIL; break; case WINNER: type = TYPE_MIDI; rsc = Resources.SND_WINNER; break; case LOSER: type = TYPE_MIDI; rsc = Resources.SND_LOSER; break; case DICES_LONG: rsc = Resources.SND_DICES_LONG; break; case DICES_SHORT: rsc = Resources.SND_DICES_SHORT; break; case PIECE: rsc = Resources.SND_PIECE; break; } m_sounds[snd] = Manager.createPlayer(Resources.getResource(rsc), type); if (snd == MUSIC) { m_sounds[snd].setLoopCount(-1); // loop intro tune for ever and ever } } catch (IOException e) { e.printStackTrace(); } catch (MediaException e) { e.printStackTrace(); } } /** Prevent instantiation */ private Audio() {} }