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 }
时间: 2024-10-09 04:58:01