Java图形接口:迷你音乐播放器的实现

实现根据音乐节拍显示不同图形在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


package 迷你音乐播放器;

import 图形接口.pao;

import javax.sound.midi.*;
import javax.swing.*;

public class MiniMusicPlayer {
    
    
    static JFrame f =new JFrame("My first Music video");
    static MyDrawPanel ml;

    public static void main(String[] args) {
    
    
        MiniMusicPlayer mini = new MiniMusicPlayer();
        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.setTempoInBPM(120);
            sequencer.start();
        }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 e){
    
    }
        return event;
        }
}
package 迷你音乐播放器;

import javax.sound.midi.ControllerEventListener;
import javax.sound.midi.ShortMessage;
import javax.swing.*;
import java.awt.*;

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)+100);
            int y = (int)((Math.random()*40)+100);
            g.fillRect(x,y,ht,width);
            msg = false;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_51677496/article/details/113359357
今日推荐