当前位置:首页 > 全部子站 > IT > 思科认证

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

来源:长理培训发布时间:2017-12-22 09:20:30

 百度广告

 Java在多媒体处理方面的确优势不大,但是我们在程序中有些时候又需要一些音乐做为点缀,如果播放的音乐是wav等波形音频文件,又挺大,所以背景音乐最好就是MIDI了,可是网上很多播放MIDI的教程都是简单的几句话的例子,并且没有考虑资源的释放问题,如果程序长久运行的话,就会出现内存越耗越多的情况,以至于最后抛出一个java.lang.OutOfMemoryError,整个程序就挂了。  在MIDI的播放中,一个类是比较重要的,那就是MidiSystem类,它负责整个MIDI播放设备等的管理,其实就是Seqencer,它就是一个MIDI播放设置,用于播放MIDI序列的,还有一个类叫Seqence,它就是MIDI的序列,MIDI的序列可以自己由程序生成,也可以从文件中或者URL中读取。

  下面我们来看一个例子吧:

/*
 *
 *
 * and open the template in the editor.

package test1;

import java.io.File;
import java.io.InputStream;
import java.util.Map;
import java.util.logging.Logger;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;

/**
 * @author hadeslee
public class Test5 implements Runnable{

  private Sequencer midi;
  private int i;
  public Test5(){
    new Thread(this).start();
  private void initMap(){
      map = new Hashtable();
      midi.open();
        try {
          map.put(s, s1);
          Logger.getLogger(Test5.class.getName()).log(Level.SEVERE, null, ex);
          Logger.getLogger(Test5.class.getName()).log(Level.SEVERE, null, ex);
      }
      Logger.getLogger(Test5.class.getName()).log(Level.SEVERE, null, ex);
    
  private void createPlayer(String name){

      Sequence se=map.get(name);

      midi.setSequence(se);

      
      Logger.getLogger(Test5.class.getName()).log(Level.SEVERE, null, ex);
    
  public void run(){
      try {
        String name=names[(int)(Math.random()*names.length)];
        Thread.sleep(10000);
      } catch (InterruptedException ex) {
      }
  }
    new Test5();
}

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

责编:罗莉

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部