您的位置:首页 > 其它

音乐盒录像带第二版之注册并取得ControllerEvent方法

2015-08-09 16:01 288 查看
import javax.sound.midi.*;

public class MiniMusicPlayer2 implements ControllerEventListener//我们必须要监听ControllerEvent,因此实现了这个借口
{
public static void main(String [] args)
{
MiniMusicPlayer2 mini=new MiniMusicPlayer2();
mini.go();
}
public void go()
{
try
{
Sequencer sequencer=MidiSystem.getSequencer();
sequencer.open();

//像sequencer注册事件。注册的方法取用监听者与代表想要临听的时间的int数组,我们只需要127事件
int [] eventsIWant={127};
sequencer.addControllerEventListener(this,eventsIWant);

Sequence seq=new Sequence(Sequence.PPQ,4);
Track track=seq.createTrack();
for(int i=5;i<60;i+=4)
{
track.add(makeEvent(144,1,i,100,i));
track.add(makeEvent(176,1,127,0,i));//插入的时间标号为127的自定义ControllerEvent(176),它不会做任何事件,只是让我们知道有音符被播放,应为它的tick更NOTE ON是同时进行的
track.add(makeEvent(128,1,i+2,100,i+2));
}
sequencer.setSequence(seq);
sequencer.setTempoInBPM(220);
sequencer.start();

}catch(Exception ex)
{
ex.printStackTrace();
}
}
public void controlChange(ShortMessage event)//获知时间时再命令打印出字符串的时间处理程序
{
System.out.println("la");
}
public static MidiEvent makeEvent(int comd,int chan,int one,int two,int tick)
{
MidiEvent event=null;
try
{
ShortMessage a=new ShortMessage();
a.setMessage(comd,chan,one,two);
event = new MidiEvent(a,tick);

}
catch(Exception e){}
return event;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: