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

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;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值