⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 musicplayer.java

📁 基于java的一款游戏的故事。基于java的一款游戏的故事。基于java的一款游戏的故事。
💻 JAVA
字号:
package com.thinkenjoy.control;

import java.io.InputStream;

import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.media.control.VolumeControl;

/**
 *
 * 控制音乐播放的类
 */
class MusicPlayer {

  private static MusicPlayer instance;

  private static final String MIDI_FILE[] = { "game1", "game2", "game3" };

  public Player playerArray[];

  public boolean hasbeenLoaded[];

  public Player currentPlayer;

  private volatile boolean isPaused;

  public int currentChannelId = -1;

  private MusicPlayer() {
    initial();
    Control.loadMusicSetting();
  }

  /**
   * 初始化每个MIDI音乐,每种音乐占用一个声道
   *
   */
  public static MusicPlayer getinstance() {
    if (instance == null) {
      instance = new MusicPlayer();
    }
    return instance;
  }

  /**
   * 初始化
   *
   */
  public final void initial() {
    playerArray = new Player[MIDI_FILE.length];
    hasbeenLoaded = new boolean[MIDI_FILE.length];
    for (int channelId = 0; channelId < MIDI_FILE.length; channelId++) {
      loadMidi(channelId);
    }
  }

  /**
   * 载入某个声道的MIDI音乐
   *
   * @param channelId
   */
  public final void loadMidi(int channelId) {
    try {
      hasbeenLoaded[channelId] = false;
      InputStream inputstream = getClass().getResourceAsStream(
          "/sound/" + MIDI_FILE[channelId] + ".mid");
      playerArray[channelId] = Manager.createPlayer(inputstream,
          "audio/midi");
      playerArray[channelId].realize();
      hasbeenLoaded[channelId] = true;
    } catch (Exception ex) {
      System.out.println("加裁声音资源出错!");
    }
  }

  /**
   * 按照相应的循环模式播放某个声道音乐
   *
   * @param channelId
   *            声道
   * @param loop
   *            循环模式
   */
  public synchronized void play(int channelId, int loop) {
    try {
      if (!hasbeenLoaded[channelId])
        return;

      if (currentPlayer != null && currentChannelId == channelId
          && currentPlayer.getState() == Player.STARTED) {
        return;
      }
      if (currentChannelId != channelId) {
        stop();
      }
      currentPlayer = playerArray[channelId];

      currentPlayer.setLoopCount(loop);
      setVolume(Control.musicVolumn);
      currentPlayer.start();
      currentChannelId = channelId;
    } catch (Exception _ex) {
      System.out.println("播放声音出错!");
    }
  }

  /**
   * 停止当前播放的声音
   *
   */
  public synchronized void stop() {
    try {
      if (currentPlayer != null) {
        currentPlayer.stop();
        currentPlayer.deallocate();

        currentPlayer = null;
      }
    } catch (Exception ex) {
      System.out.println("停止当前播放的声音时出错!");
    }
  }

  /**
   * 获取声道的数量
   *
   * @return
   */
  public int getInstrumentNumber() {
    return MIDI_FILE.length;
  }

  /**
   * 设置声音的大小
   *
   * @param level
   */
  public void setVolume(int level) {
    if (currentPlayer != null) {
      ((VolumeControl) currentPlayer.getControl("VolumeControl"))
          .setLevel(level);

      Control.musicVolumn = level;
    }

  }

  /**
   * 获得相应声道声音的大小
   *
   * @return
   */
  public int getVolume() {
    return Control.musicVolumn;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -