音乐盒录像带第二版之注册并取得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; } }
相关文章推荐
- C++ 几种排序算法
- android jni 调用结构体示例
- RunLoop学习笔记
- NOJ2098 3_A+B(III)(大数加法)
- PowerDesigner中Name与Code同步的问题
- 二叉树之打印二叉树两节点路径
- 第23章 尝试互联网(2)
- uva10375 Choose and Divide(唯一分解定理)
- 模拟-FZU-2150-Fire Game
- util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
- Win7 Centos7安装双系统
- C++: Vector详解
- SharePreferences——存储数据
- 共享存储函数
- HDOJ1009
- python 标准库-argparse 学习
- NOJ1032 三角形数(大数模板)
- [JLOI2013]卡牌游戏
- ZigZag Conversion
- 20150809训练题