如何将midi文件添加到JFrame?

时间:2014-03-03 16:24:08

标签: java

我正在尝试将midi文件添加到我的JFrame中,这样当它启动时,音乐将永远循环播放。其他教程对我没用。

public void LoopSound() throws LineUnavailableException{
    Clip clip = AudioSystem.getClip(getClass().getResource("/pokemontrivia/VioletCity.mid"));
}

1 个答案:

答案 0 :(得分:0)

以下示例显示Swing JFrame,然后加载并播放MIDI文件。

让MIDI循环“永远”的技巧是调用sequencer.setLoopCount(Integer.MAX_VALUE);

package com.stackoverflow.questions;

import java.awt.Dimension;
import java.awt.Point;
import java.net.URL;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class MidiJFrame extends JFrame {


public MidiJFrame()
{
    super("Window Title");

    startMidi();

    add( new JLabel("Midi JFrame", JLabel.CENTER) );

    setSize( new Dimension(300, 100) );
    setLocation( new Point(100, 200) );
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}

public static void main(String [] args)
{
    MidiJFrame app = new MidiJFrame();
}

private void startMidi()
{        
    try 
    {            
        URL url = getClass().getResource("/samples/avicii-wake_me_up.mid");
        Sequence sequence = MidiSystem.getSequence(url);

        // the sequence can also be obtained from the local filesystem
        // Sequence sequence = MidiSystem.getSequence(new File("path/to/midi/file.mid"));

        // Create a sequencer for the sequence
        Sequencer sequencer = MidiSystem.getSequencer();
        sequencer.open();
        sequencer.setSequence(sequence);

        // play the midi a semi-infinate loop 
        sequencer.start();
        sequencer.setLoopCount(Integer.MAX_VALUE);
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }        
}



}