java学习笔记_MIDI_GUI

Posted Ren.Yu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java学习笔记_MIDI_GUI相关的知识,希望对你有一定的参考价值。

 1 import javax.sound.midi.*;
 2 import javax.swing.*;
 3 import java.awt.event.*;
 4 import java.awt.*;
 5 
 6 class MyPanel_2 extends JPanel implements ControllerEventListener{
 7     boolean msg = false;
 8     
 9     public void paintComponent( Graphics g ) {
10         if ( msg ) {
11             g.fillRect(0, 0, this.getWidth(), this.getHeight());
12             int red = (int) (Math.random() * 255);
13             int green = (int) (Math.random() * 255);
14             int blue = (int) (Math.random() * 255);
15             Color randomColor = new Color(red, green, blue);
16             g.setColor(randomColor);
17             g.fillOval(70, 40, 100, 100);
18             msg = false;
19         }
20     }
21     
22     public void controlChange(ShortMessage event) {
23         msg = true;
24         repaint();
25     }
26 }
27 
28 public class Midi{
29     
30     JFrame frame = new JFrame("My first Music Video");
31     MyPanel_2 panel;    
32     
33     public void show_my_panel() {
34         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
35         panel = new MyPanel_2();
36         frame.setContentPane(panel);
37         frame.setBounds(30, 30, 300, 300);
38         frame.setVisible(true);
39     }
40     
41     public static MidiEvent makeEvent(int cmd, int chan, int one, int two, int tick) {
42         MidiEvent event = null;
43         try {
44             ShortMessage a = new ShortMessage();
45             a.setMessage(cmd, chan, one, two);
46             event = new MidiEvent(a, tick);
47         } catch (Exception e) {}
48         return event;
49     }
50     
51     public void play() {
52         try {
53             Sequencer player = MidiSystem.getSequencer();
54             player.open();
55             
56             int[] eventsIWant = {127};
57             player.addControllerEventListener(panel, eventsIWant);
58             
59             Sequence seq = new Sequence(Sequence.PPQ, 4);//divisionType, resolution
60             
61             Track track = seq.createTrack();
62             
63             for (int i = 5; i < 61; i+= 4) {
64                 track.add(makeEvent(144, 1, i, 100, i));
65                 track.add(makeEvent(176, 1, 127, 0, i));
66                 track.add(makeEvent(128, 1, i, 100, i + 2));
67             }
68             
69             player.setSequence(seq);
70             player.setTempoInBPM(220);
71             player.start();
72             while( player.isRunning() ) {                
73                 Thread.sleep(1000);
74             }
75             player.close();
76             
77         } catch( Exception ex) {
78             ex.printStackTrace();
79         }
80     }    
81     
82     public static void main(String[] args) {
83         Midi midi = new Midi();
84         
85         midi.show_my_panel();
86         midi.play();
87     }
88 }

 

以上是关于java学习笔记_MIDI_GUI的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记:python3,代码片段(2017)

JSP 学习笔记

java学习笔记_内存分析

Jsp入门EL表达式_学习笔记

Java异常处理_学习笔记

JSP学习笔记:JSP语法和指令