import javax.sound.midi.*; import javax.swing.*; import java.awt.*; public class MiniMusicPlayer1 { static JFrame f = new JFrame("My first video clip"); static MyDrawPanel ml; int t = 2; public static void main(String[] args) { MiniMusicPlayer1 mini = new MiniMusicPlayer1(); mini.go(); } public void setUpGui(){ ml = new MyDrawPanel(); f.setContentPane(ml); f.setBounds(30,30,300,300); f.setVisible(true); } public void go(){ setUpGui(); try { Sequencer sequencer = MidiSystem.getSequencer(); sequencer.open(); sequencer.addControllerEventListener(ml, new int[] {127}); Sequence seq = new Sequence(Sequence.PPQ, 4); Track track = seq.createTrack(); int r =0; for (int i = 0; i < 60; i+=4){ r = (int)((Math.random() * 50) +1); track.add(makeEvent(144,1,r,100,i)); track.add(makeEvent(176,1,127,0,i)); track.add(makeEvent(128,1,r,100,i +2)); } sequencer.setSequence(seq); sequencer.start(); sequencer.setTempoInBPM(120); } catch (Exception ex){ ex.printStackTrace();} } public 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 ex) {} return event; } public class MyDrawPanel extends JPanel implements ControllerEventListener { boolean msg = false; public void controlChange(ShortMessage event){ msg = true; repaint(); } public void paintComponent(Graphics g){ if(msg){ Graphics2D g2 = (Graphics2D) g; int r = (int) (Math.random() * 250); int gr = (int) (Math.random() * 250); int b = (int) (Math.random() * 250); 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); if (t%2== 0) { g.fillOval(x,y,ht, width); } else { g.fillRect(x,y,ht, width); } t++; msg = false; } } } }
This code creates random graphics for each midi event, I need to set up midi Notes here, how can I just import the midi file and make it draw graphics according to the imported midi file. How to convert midi file to short messages?
source share