java学习笔记_MIDI_GUI
2024-08-23 02:33:53
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();
}
}
最新文章
- 21.Android之SQLite数据库学习
- PDO 学习与使用 ( 一 ) :PDO 对象、exec 方法、query 方法与防 SQL 注入
- Hibernate 实体关联关系映射【转】
- T-SQL 变量
- Android(java)学习笔记65:线程的生命周期
- 若后台的Activity被系统回收...
- 转:CFile::Seek
- Android KitKat 4.4 Wifi移植AP模式和网络共享的调试日志
- epoll详解
- go get 代理设置
- spring异常处理器
- PHPExcel生成或读取excel文件
- pHP生成唯一单号
- Codeforces 1051E. Vasya and Big Integers
- 通过泛型来简化findViewById
- 软工实践-Beta 冲刺 (5/7)
- 在N个元素的数组中获取K个元素的所有组合问题
- PAT 1052. Linked List Sorting
- [转]DbHelper通用数据库访问帮助类
- 360急速浏览器JS的调试
热门文章
- 【剑指offer】八皇后问题
- c++中的强制转换static_cast、dynamic_cast、reinterpret_cast的不同用法儿
- Redis 脚本
- 小白日记30:kali渗透测试之Web渗透-扫描工具-Skipfish
- 2014年GCT考试报名时
- Android(java)学习笔记114:LayoutInflater和findViewById
- The required Server component failed to start so Tomcat is unable to start解决之一
- C&;python文件读写效率
- 转: Android开发中的MVP架构详解(附加链接比较不错)
- hihocoder 1043 完全背包