import javax.sound.midi.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*; class MyPanel_2 extends JPanel implements ControllerEventListener{
boolean msg = false; public void paintComponent( Graphics g ) {
if ( msg ) {
g.fillRect(0, 0, this.getWidth(), this.getHeight());
int red = (int) (Math.random() * 255);
int green = (int) (Math.random() * 255);
int blue = (int) (Math.random() * 255);
Color randomColor = new Color(red, green, blue);
g.setColor(randomColor);
g.fillOval(70, 40, 100, 100);
msg = false;
}
} public void controlChange(ShortMessage event) {
msg = true;
repaint();
}
} public class Midi{ JFrame frame = new JFrame("My first Music Video");
MyPanel_2 panel; public void show_my_panel() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new MyPanel_2();
frame.setContentPane(panel);
frame.setBounds(30, 30, 300, 300);
frame.setVisible(true);
} public static MidiEvent makeEvent(int cmd, int chan, int one, int two, int tick) {
MidiEvent event = null;
try {
ShortMessage a = new ShortMessage();
a.setMessage(cmd, chan, one, two);
event = new MidiEvent(a, tick);
} catch (Exception e) {}
return event;
} public void play() {
try {
Sequencer player = MidiSystem.getSequencer();
player.open(); int[] eventsIWant = {127};
player.addControllerEventListener(panel, eventsIWant); Sequence seq = new Sequence(Sequence.PPQ, 4);//divisionType, resolution Track track = seq.createTrack(); for (int i = 5; i < 61; i+= 4) {
track.add(makeEvent(144, 1, i, 100, i));
track.add(makeEvent(176, 1, 127, 0, i));
track.add(makeEvent(128, 1, i, 100, i + 2));
} player.setSequence(seq);
player.setTempoInBPM(220);
player.start();
while( player.isRunning() ) {
Thread.sleep(1000);
}
player.close(); } catch( Exception ex) {
ex.printStackTrace();
}
} public static void main(String[] args) {
Midi midi = new Midi(); midi.show_my_panel();
midi.play();
}
}

最新文章

  1. 21.Android之SQLite数据库学习
  2. PDO 学习与使用 ( 一 ) :PDO 对象、exec 方法、query 方法与防 SQL 注入
  3. Hibernate 实体关联关系映射【转】
  4. T-SQL 变量
  5. Android(java)学习笔记65:线程的生命周期
  6. 若后台的Activity被系统回收...
  7. 转:CFile::Seek
  8. Android KitKat 4.4 Wifi移植AP模式和网络共享的调试日志
  9. epoll详解
  10. go get 代理设置
  11. spring异常处理器
  12. PHPExcel生成或读取excel文件
  13. pHP生成唯一单号
  14. Codeforces 1051E. Vasya and Big Integers
  15. 通过泛型来简化findViewById
  16. 软工实践-Beta 冲刺 (5/7)
  17. 在N个元素的数组中获取K个元素的所有组合问题
  18. PAT 1052. Linked List Sorting
  19. [转]DbHelper通用数据库访问帮助类
  20. 360急速浏览器JS的调试

热门文章

  1. 【剑指offer】八皇后问题
  2. c++中的强制转换static_cast、dynamic_cast、reinterpret_cast的不同用法儿
  3. Redis 脚本
  4. 小白日记30:kali渗透测试之Web渗透-扫描工具-Skipfish
  5. 2014年GCT考试报名时
  6. Android(java)学习笔记114:LayoutInflater和findViewById
  7. The required Server component failed to start so Tomcat is unable to start解决之一
  8. C&amp;python文件读写效率
  9. 转: Android开发中的MVP架构详解(附加链接比较不错)
  10. hihocoder 1043 完全背包