⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minimusicplayer3.java

📁 HeadFirstCode系列图书里的源代码
💻 JAVA
字号:
import javax.sound.midi.*;import java.io.*;import javax.swing.*;import java.awt.*;  // this one plays random music with it, but only because there is a listener.public class MiniMusicPlayer3 {    static JFrame f = new JFrame("My First Music Video");    static MyDrawPanel ml;    public static void main(String[] args) {           MiniMusicPlayer3 mini = new MiniMusicPlayer3();           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 {         // make (and open) a sequencer, make a sequence and track         Sequencer sequencer = MidiSystem.getSequencer();                  sequencer.open();                 sequencer.addControllerEventListener(ml, new int[] {127});         Sequence seq = new Sequence(Sequence.PPQ, 4);         Track track = seq.createTrack();              // now make two midi events (containing a midi message)      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));       } // end loop                  // add the events to the track                      // add the sequence to the sequencer, set timing, and start          sequencer.setSequence(seq);           sequencer.start();          sequencer.setTempoInBPM(120);      } catch (Exception ex) {ex.printStackTrace();}  } // close go   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 e) { }          return event;       } class MyDrawPanel extends JPanel implements ControllerEventListener {            // only if we got an event do we want to paint      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);                  g.fillRect(x,y,ht, width);         msg = false;       } // close if     } // close method   }  // close inner class} // close class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -