📄 cmidiplayer.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 + -