java播放midi:为Java程序中添加播放MIDI音乐功能

Java在多媒体处理方面确优势不大但是我们在中有些时候又需要些音乐做为点缀如果播放音乐是wav等波形音频文件,又挺大,所以背景音乐最好就是MIDI了可是网上很多播放MIDI教程都是简单几句话例子并且没有考虑资源释放问题如果长久运行话,就会出现内存越耗越多情况以至于最后抛出个java.lang.OutOfMemoryError整个就挂了

  在MIDI播放中个类是比较重要那就是Midi它负责整个MIDI播放设备等管理其实就是Seqencer它就是个MIDI播放设置用于播放MIDI序列还有个类叫Seqence它就是MIDI序列,MIDI序列可以自己由生成也可以从文件中或者URL中读取

  下面我们来看个例子吧:

/*
 * Test5.java
 *
 * Created _disibledevent=>    private i;
    private Map<String,Sequence> map;
    public Test5{
        initMap;
        Thread(this).start;
    }
    private void initMap{
        try {
            map = Hashtable<String, Sequence>;
            midi = Midi.getSequencer(false);
            midi.open;
            for (String s : names) {
                try {
                    Sequence s1 = Midi.getSequence( File(s));
                    map.put(s, s1);
                } catch (InvalidMidiDataException ex) {
                    Logger.getLogger(Test5..getName).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Test5..getName).log(Level.SEVERE, null, ex);
                }
            }
        } catch (MidiUnavailableException ex) {
            Logger.getLogger(Test5..getName).log(Level.SEVERE, null, ex);
        }
       
    }
    private void createPlayer(String name){
        try {

            Sequence se=map.get(name);

            midi.Sequence(se);
            midi.start;

           
        }catch (InvalidMidiDataException ex) {
            Logger.getLogger(Test5..getName).log(Level.SEVERE, null, ex);
        }
       
    }
    public void run{
        while(true){
            try {
                .out.prln("换文件了."+(i));
                String name=names[()(Math.random*names.length)];
                createPlayer(name);
                Thread.sleep(10000);
               
            } catch (InterruptedException ex) {
                Logger.getLogger(Test5..getName).log(Level.SEVERE, null, ex);
            }
        }
    }
    public void (String args) {
        Test5;
    }
}
  在这里有很重要那就是在运行时候只要个Seqencer就可以了我以前在里面每次播放时候都生成了个Seqencer那个时候我想我都close思路方法了它还能被打开吗?其实它还可以再度被打开就是这样种惯性思维使得最终因内存溢出而崩溃

  现在按我这种方式播,哪怕10毫秒换次MIDI都可以换个几万次内存点都没有加呵呵,真是防不胜防啊

Tags:  midi音乐节 midi音乐 midi音乐下载 java播放midi

延伸阅读

最新评论

发表评论