码迷,mamicode.com
首页 > 编程语言 > 详细

java学习笔记_MIDI_GUI

时间:2016-09-11 01:38:58      阅读:450      评论:0      收藏:0      [点我收藏+]

标签:

 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

标签:

原文地址:http://www.cnblogs.com/ren-yu/p/5860821.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!