import javax.sound.midi.*;
import javax.swing.*;
import java.awt.*;
/**
* Created by Jonik on 09.01.2015.
*/
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;
}
}
}
}
Mã này làm đồ họa ngẫu nhiên cho mỗi sự kiện midi, tôi phải thiết lập ghi chú ở đây, làm thế nào tôi có thể nhập tập tin midi và làm cho nó vẽ đồ họa theo tập tin midi nhập khẩu. Làm thế nào để chuyển đổi tập tin midi thành tin nhắn ngắn?Tập tin Midi vào sự kiện midi