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

📄 cmidiplayer.java

📁 网上收集的
💻 JAVA
字号:
package chiidanceapp;


import java.io.*;
import javax.sound.midi.*;
import javax.sound.midi.MetaMessage;
import java.util.ResourceBundle;



public class CMidiPlayer{
  //////////////////////////////////////////////////////////
  
  private int MidiIndex  = 1;
  private int VoiceIndex = 1;

  private File MidiFile;
  private InputStream aInputStream;

  
  private Sequence  sequence;
  private Sequencer sequencer;

  private boolean isPlay   = false;
  private boolean isLoop   = false;
  private boolean isPaused = false;

  private static final int END_OF_TRACK_MESSAGE = 47;
  /////////////////////////////////////////////////////////////////////////////
  public CMidiPlayer() {
  }
  /////////////////////////////////////////////////////////////////////////////
  public void setMidiIndex( int MidiIndex )
  {
      this.MidiIndex =  MidiIndex;
  }

  public void isPlay( boolean isPlay )
  {
      this.isPlay = isPlay;
  }

  public boolean isPlay()
  {
      return isPlay;
  }
  /////////////////////////////////////////////////////////////////////////
  
  public void InitSequence( int MidiIndex )
  {
    this.MidiIndex = MidiIndex;
    try{
      switch( MidiIndex )
      {
        case 1:
          MidiFile = new File( "Resource/mid/op.mid" );
           break;
        case 2:
          MidiFile = new File( "Resource/music/bgm_5.mid" );
          break;
        case 3:
          MidiFile = new File( "Resource/music/bgm_2.mid" );
          break;
        case 4:
          MidiFile = new File( "Resource/music/bgm_1.mid" );
          break;
        case 5:
          MidiFile = new File( "Resource/music/bgm_3.mid" );
          break;
        case 6:
          MidiFile = new File( "Resource/music/bgm_4.mid" );
          break;
        case 7:
          MidiFile = new File( "Resource/music/select.mid" );
          break;
        case 8:
          MidiFile = new File( "Resource/music/win.mid" );
          break;


      }

      sequence = MidiSystem.getSequence( MidiFile );
      sequencer = MidiSystem.getSequencer();
      sequencer.open();
      sequencer.addMetaEventListener( new CMetaEventListener() );

    }catch( Exception ex ){
      ex.printStackTrace();
    }

  }

  /////////////////////////////////////////////////////////////////////////
  
  public void play( boolean isLoop )
  {
    if( sequencer != null && sequence != null && sequencer.isOpen() )
    {
      try {
        this.isLoop = isLoop;
        sequencer.setSequence( sequence );
        sequencer.setMicrosecondPosition( 0 );
        sequencer.start();
      }
      catch ( Exception ex ) {
        ex.printStackTrace();
      }
    }
  }

  ///////////////////////////////////////////////////////////////////////////
  public void stop()
  {
     if( sequencer != null && sequencer.isOpen() )
     {
        sequencer.stop();
        sequencer.setMicrosecondPosition( 0 );
     }
  }

  ///////////////////////////////////////////////////////////////////////////
  public void close()
  {
      if( sequencer != null && sequencer.isOpen() )
      {
         sequence  = null;
         MidiFile  = null;
         sequencer.setMicrosecondPosition( 0 );
         sequencer.close();
      }
  }

  ///////////////////////////////////////////////////////////////////////////
  public void setPause( boolean isPaused )
  {
      this.isPaused = isPaused;

      if( isPaused && sequencer != null && sequencer.isOpen() )
      {
          if( isPaused )
          {
            sequencer.stop();
          }
      }
   }

   public void replay()
   {
    try {
      sequencer.open();
    }
    catch (MidiUnavailableException ex) {
      ex.printStackTrace();
    }

     sequencer.setMicrosecondPosition( 0 );
     sequencer.start();
   }

   private class CMetaEventListener implements MetaEventListener
   {

     public void meta( MetaMessage metaMessage ) {
       if( metaMessage.getType() == END_OF_TRACK_MESSAGE )
      {
          if( sequencer != null && sequencer.isOpen() && isLoop )
         {
           sequencer.setMicrosecondPosition( 0 );
           sequencer.start();
         }
         else
         {
           close();
         }
       }
     }
   }



}

⌨️ 快捷键说明

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