2015-01-09 3 views
6
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; 
      } 
     } 
    } 

} 

यह कोड प्रत्येक मिडी ईवेंट के लिए यादृच्छिक ग्राफिक्स बनाता है, मुझे यहां मिडी नोट्स सेट अप करना होगा, मैं मिडी फ़ाइल कैसे आयात कर सकता हूं और इसे आयातित मिडी फ़ाइल के अनुसार ग्राफिक्स खींच सकता हूं। Midi फ़ाइल को छोटे संदेशों में कैसे परिवर्तित करें?मिडी फ़ाइल मिडी इवेंट

उत्तर

0

आप JFugue आज़मा सकते हैं। यह आधिकारिक उद्देश्य विशेष रूप से संगीत रचना/खेल से संबंधित है, लेकिन इसमें MIDI रीडिंग लाइब्रेरी है जो न केवल छोटे संदेश एकत्र करती है बल्कि उन्हें एक और अधिक पठनीय प्रारूप में परिवर्तित करती है।

आपको अपना खुद का "रेंडरर" लिखने में सक्षम होना चाहिए जो प्रासंगिक मूल्यों (नोट्स इत्यादि) को समय-समय पर अनुक्रमित सूची में रखता है और बस वापस चलाता है।

3

मैं सीधे डॉक्स से ले रहा हूँ:

Sequence sequence = MidiSystem.getSequence(...); // either a File or InputStream 
Track track0 = sequence.getTracks[0]; 
for (int i = 0 ; i < track0.size() ; i++) 
{ 
    MidiEvent event = track0.get(i); 
    // do your processing here. 
} 

अपने यह समय में वापस खेलने की कोशिश यदि आप कुछ इस तरह कर सकता है:

Sequence sequence = MidiSystem.getSequence(...); // either a File or InputStream 
sequencer.setSequence(sequence); 
sequencer.start(); 
संबंधित मुद्दे