第12章-图形用户接口(3)---动画-2-音乐播放器
来源:互联网 发布:苹果笔记本实用软件 编辑:程序博客网 时间:2024/06/06 00:19
2015/6/17
注意:
1、设置每分钟的节拍数量,BPM节拍数
sequencer.setTempoInBPM(220);
2、ControllerEventListener 接口应由一个其实例需要在 Sequencer 处理了请求的 MIDI 控制更改事件类型时接收通知的类实现。
需要实现public void controlChange(ShortMessage event)方法
3、a.setMessage(command,channel,one,two)
command - 此消息所表示的 MIDI 命令 channel - 与此消息关联的通道 data1 - 第一个数据字节 data2 - 第二个数据字节
4、
向sequencer注册事件,注册的方法取用监听者与代表想要聆听的事件的int数组,我们只需要127事件
第二个输入的值是用来监控特定的事件的。
int[] eventsIWant={127};
sequencer.addControllerEventListener(ml,eventsIWant);
5、插入事件编号为176的自定义ControllerEvent(176),它不会做任何事情,只是让我们知道有音符被播放,因为它的tick跟NoteOn是同时进行的。
track.add(makeEvent(176,1,127,0,i));
第一版:
package MiDiMusic;import javax.sound.midi.*;public class MiniMusicPlayer1 {public static void main(String[] args){try{//创建节拍的序列Sequencer sequencer=MidiSystem.getSequencer();sequencer.open();Sequence seq=new Sequence(Sequence.PPQ,4);//创建音轨Track track=seq.createTrack();for(int i=5;i<61;i+=4){//向音轨上添加节拍//音符的开始track.add(makeEvent(144,1,i,100,i));//音符的结束track.add(makeEvent(128,1,i,100,i+2));}//将音轨设置进拍序器sequencer.setSequence(seq);//设置每分钟的节拍数量,BPM节拍数sequencer.setTempoInBPM(220);sequencer.start();}catch(Exception ex){ex.printStackTrace();}}//静态方法,用来生成MidiEvent对象//不用静态方法,创建一个类对象,然后调用也可以,但这样比较方便。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);//将a设置在tick节拍处。event=new MidiEvent(a,tick);}catch(Exception e){}return event;}}
第二版
package MiDiMusic;import javax.sound.midi.*;//ControllerEventListener 接口应由一个其实例需要在 Sequencer 处理了请求的 MIDI 控制更改事件类型时接收通知的类实现。public class MiniMusicPlayer2 implements ControllerEventListener{public static void main(String[] args){MiniMusicPlayer2 mini=new MiniMusicPlayer2();mini.go();}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<61;i+=4){//向音轨上添加节拍//音符的开始track.add(makeEvent(144,1,i,100,i));//插入事件编号为176的自定义ControllerEvent(176),它不会做任何事情,只是让我们知道有音符被播放,因为它的tick跟NoteOn是同时进行的。track.add(makeEvent(176,1,127,0,i));//音符的结束track.add(makeEvent(128,1,i,100,i+2));}//将音轨设置进拍序器sequencer.setSequence(seq);//设置每分钟的节拍数量,BPM节拍数sequencer.setTempoInBPM(220);sequencer.start();}catch(Exception ex){ex.printStackTrace();}}//静态方法,用来生成MidiEvent对象//command - 此消息所表示的 MIDI 命令 channel - 与此消息关联的通道 data1 - 第一个数据字节 data2 - 第二个数据字节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);//将a设置在tick节拍处。event=new MidiEvent(a,tick);}catch(Exception e){}return event;}@Override//当音符发出时,即事件触发时,输出。public void controlChange(ShortMessage event) {System.out.println("la");// TODO 自动生成的方法存根}}
第三版:
package MiDiMusic;import javax.sound.midi.*;import javax.swing.*;public class MiniMusicPlayer3{static JFrame f=new JFrame();static MyDrawPanel ml;public static void main(String[] args){MiniMusicPlayer3 mini=new MiniMusicPlayer3();mini.go();}void setUpGui(){ml=new MyDrawPanel();f.getContentPane().add(ml);f.setBounds(30, 30, 300, 300);f.setVisible(true);}void go(){setUpGui();try{//创建节拍的序列Sequencer sequencer=MidiSystem.getSequencer();sequencer.open();//向sequencer注册事件,注册的方法取用监听者与代表想要聆听的事件的int数组,我们只需要127事件//第二个输入的值是用来监控特定的事件的。int[] eventsIWant={127};sequencer.addControllerEventListener(ml,eventsIWant);Sequence seq=new Sequence(Sequence.PPQ,4);//创建音轨Track track=seq.createTrack();int r=0;for(int i=5;i<61;i+=4){//向音轨上添加节拍//音符的开始r=(int)((Math.random()*50)+1);track.add(makeEvent(144,1,r,100,i));//插入事件编号为176的自定义ControllerEvent(176),它不会做任何事情,只是让我们知道有音符被播放,因为它的tick跟NoteOn是同时进行的。track.add(makeEvent(176,1,127,0,i));//音符的结束track.add(makeEvent(128,1,r,100,i+2));}//将音轨设置进拍序器sequencer.setSequence(seq);//设置每分钟的节拍数量,BPM节拍数sequencer.setTempoInBPM(120);sequencer.start();}catch(Exception ex){ex.printStackTrace();}}//静态方法,用来生成MidiEvent对象//command - 此消息所表示的 MIDI 命令 channel - 与此消息关联的通道 data1 - 第一个数据字节 data2 - 第二个数据字节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);//将a设置在tick节拍处。event=new MidiEvent(a,tick);}catch(Exception e){}return event;}}
package MiDiMusic;import java.awt.*;import javax.sound.midi.*;import javax.swing.*;public class MyDrawPanel extends JPanel implements ControllerEventListener{boolean msg=false;//public void paintComponent(Graphics g){if(msg){//Graphics2D g2=(Graphics2D)g;int r=(int)(Math.random()*255);int gr=(int)(Math.random()*255);int b=(int)(Math.random()*255);g.setColor(new Color(r,gr,b));int ht=(int)((Math.random()*120)+10);int width=(int)((Math.random()*120)+10);int x=(int)((Math.random()*40)+10);int y=(int)((Math.random()*40)+10);g.fillRect(x, y, width, ht);msg=false;}}public void controlChange(ShortMessage event) {msg=true;repaint();}}
0 0
- 第12章-图形用户接口(3)---动画-2-音乐播放器
- 第12章-图形用户接口(3)---动画-1
- 第12章-图形用户接口
- 第12章-图形用户接口(2)---内部类
- 音乐播放器接口
- h5float+动画+音乐播放器
- 12 图形用户接口
- 第三天 音乐播放器
- HeadFirstJava 12 图形用户接口
- 第十二章 图形用户接口
- 音乐播放器3
- 音乐播放器2
- 音乐播放器之--百度音乐的接口调用
- 音乐播放器+三基色调色+动画播放
- OneDayOneEx: 3 音乐播放器
- 使用MCI接口播放音乐
- 使用MCI接口播放音乐
- iOS开发之音乐播放器专辑图片旋转动画
- IO学习笔记
- 分析一下github中项目的软件启动画面的实现
- Shell命令:echo介绍,echo如何输出带颜色的文本
- web缓存相关知识(转)
- C高级篇(穿越时空的迷雾)
- 第12章-图形用户接口(3)---动画-2-音乐播放器
- IOS检测网络连接状态(转)
- 软文创意18招之四:动真情
- android开发环境搭建
- 消消乐中精灵的下落填充算法
- exp时遇到ora-932错误,然后异常终止
- 北京动点飞扬软件开发团队最新联系方式
- UIManager可设置的各种属性--记录
- PostgreSQL在Ubuntu上安装