Java 在多媒体处理方面的确优势不大,但是我们在程序中有些时候又需要一些音乐。

如果播放的音乐是wav等波形音频文件,又很大的话,所以背景音乐最好就是MIDI了。

网上很多播放MIDI的教程都是简单的几句话的例子。

没有考虑资源的释放问题,如果程序长久运行的话,就会出现内存越耗越多的情况,最后会抛出一个 java.lang.OutOfMemoryError。

  在MIDI的播放中,一个类是比较重要的,那就是 MidiSystem 类。

负责整个MIDI播放设备等的管理,其实就是 Seqencer,它就是一个MIDI播放设置,用于播放MIDI序列的。

另外还有一个类叫 Seqence,它就是MIDI的序列,MIDI的序列可以自己由程序生成,也可以从文件中或者URL中读取。

package test1;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Hashtable;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;

public class Test5 implements Runnable{private Sequencer midi;private String[] names={"1.mid","2.mid","3.mid","4.mid","5.mid"};private int i;private Map<String,Sequence> map;public Test5(){initMap();new Thread(this).start();}private void initMap(){try {map = new Hashtable<String, Sequence>();midi = MidiSystem.getSequencer(false);midi.open();for (String s : names) {try {Sequence s1 = MidiSystem.getSequence(new File(s));map.put(s, s1);} catch (InvalidMidiDataException ex) {Logger.getLogger(Test5.class.getName()).log(Level.SEVERE, null, ex);} catch (IOException ex) {Logger.getLogger(Test5.class.getName()).log(Level.SEVERE, null, ex);}}} catch (MidiUnavailableException ex) {Logger.getLogger(Test5.class.getName()).log(Level.SEVERE, null, ex);}}private void createPlayer(String name){try {Sequence se=map.get(name);midi.setSequence(se);midi.start();}catch (InvalidMidiDataException ex) {Logger.getLogger(Test5.class.getName()).log(Level.SEVERE, null, ex);}}public void run(){while(true){try {System.out.println("换文件了."+(++i));String name=names[(int)(Math.random()*names.length)];createPlayer(name);Thread.sleep(10000);} catch (InterruptedException ex) {Logger.getLogger(Test5.class.getName()).log(Level.SEVERE, null, ex);}}}public static void main(String[] args) {new Test5();}
}

在这里有很重要的一点,那就是在程序运行的时候,只要一个 Seqencer 就可以。

我以前在程序里面每次播放的时候都生成了一个Seqencer,我都调用它的 close() 方法了,它还能被打开吗?

其实它还可以再度被打开的,就是这样一种思维使得程序最终因内存溢出而崩溃。

 本文转自Orson博客园博客,原文链接:http://www.cnblogs.com/java-class/archive/2013/04/16/3023800.html,如需转载请自行联系原作者

Java 添加播放MIDI音乐相关推荐

  1. java channel midi_为Java程序中添加播放MIDI音乐功能

    下载本文示例代码 Java在多媒体处理方面的确优势不大,但是我们在程序中有些时候又需要一些音乐做为点缀,如果播放的音乐是wav等波形音频文件,又挺大,所以背景音乐最好就是MIDI了,可是网上很多播放M ...

  2. midi java_Java程序中添加播放MIDI音乐功能的实现方法详解

    JAVA在多媒体处理方面的确优势不大,但是我们在程序中有些时候又需要一些音乐,如果播放的音乐是wav等波形音频文件,又很大的话,所以背景音乐最好就是MIDI了,可是网上很多播放MIDI的教程都是简单的 ...

  3. MIDI应用: 播放midi音乐文件的方法 [Win32版本+ C语言版本]

    播放midi音乐文件的方法 背景说明: 在游戏编程中,给程序增加音效几乎是必须的;在普通程序中增加音效也会给使用者带来更好的体验;而mid格式的音效文件体积最小(大约1k到数十k),效果却不亚于MP3 ...

  4. 游戏编程入门(11):播放MIDI 音乐

    MIDI音乐是将音乐结合到游戏的最佳方式之一,本章就将介绍究竟如何使用相对较少的代码播放MIDI音乐. 本章内容包括: 如何使用MCI播放MIDI音乐 如何向游戏添加MIDI音乐 接上文 游戏编程入门 ...

  5. linux centos fedora rosegarden 播放 midi 音乐

    linux fedora32 播放midi音乐 其实这个日志,没想记那么多,只是为了在linux下找一个midi的播放器,默认播放器只能播放普通格式,不支持midi格式. 最终找到一个类似winamp ...

  6. [收藏]播放MIDI音乐——使用DirectMusic

    ( 本文对象: DirectMusic 初学者,想快速知道使用 DirectMusic 播放音乐的人 ) 原作者By Kylinx, 2003-5-15 ,E-mail:game-diy@163.co ...

  7. 嵌入式(stm32)学习之路---MIDI音乐播放器

    STM32用蜂鸣器播放MIDI音乐(可以基于这个基础上开发简单电子琴/魔音盒),经典程序代码,程序代码注释简明,易懂,便于移植开发. 无源蜂呜器引脚定义 #define BUZZERPORT GPIO ...

  8. 【Win 10 应用开发】MIDI 音乐合成——音符消息篇

    在上一篇中,老周介绍了一些乐理知识,有了那些常识后,进行 MIDI 编程就简单得多了.尽管微软已经把 API 封装好,用起来也很简单,但是,如果你没有相应的音乐知识基础,你是无法进行 MIDI 编程的 ...

  9. 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——1.4 用电子琴软件弹奏MIDI音乐伴奏...

    本节书摘来自异步社区<电脑音乐制作实战指南:伴奏.录歌.MTV全攻略>一书中的第1章,第1.4节,作者 健逗,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1. ...

最新文章

  1. HTML基本介绍与操作
  2. 数学知识笔记:拉格朗日乘子
  3. 正则表达式: 正向预查和负向预查
  4. UWP 开发初阶 Chapter 6 - 简单介绍如何使用 C# 改变 XAML 控件的属性
  5. 银行业数据治理之数据资产管理
  6. lftp linux,linux下使用 lftp
  7. SQL Sever2008 无法启动
  8. php redis list llen,redis llen list 命令简介
  9. 作业四: 结对编程项目---四则运算
  10. js 匿名函数_JS箭头函数三连问:为何用、怎么用、何时用
  11. mysql用户和权限管理总结_【转】mysql 用户及权限管理 小结
  12. item_search - 按关键字搜索EBAY商品
  13. html实现正方体原理,CSS3 实现正方体
  14. 天翼云内网服务器映射端口,天翼云服务器创建对等连接(不同账户组内网)
  15. BZOJ 4864: [BeiJing 2017 Wc]神秘物质
  16. 2021年福建省安全员B证(项目负责人)考试试题及福建省安全员B证(项目负责人)作业模拟考试
  17. matlab的常量和变量运算符
  18. tcl脚本学习-基础语法
  19. ssm上传图片文件到ftp(图片压缩处理)
  20. 并网逆变器PQ控制。 逆变器采用两电平逆变器,通过功率闭环控制,实现并网单位功率因数

热门文章

  1. asp前端日历_asp显示日历效果
  2. 事务对性能影响_开启英特尔事务扩展技术(TSX),即可提升intel CPU 近40%性能
  3. 微软的python开发工具_面向 Python 开发人员的 Azure 工具
  4. linux中useradd的文件路径,linux的useradd命令详细解释
  5. 基类与派生类之间的转换关系
  6. mysql8 堆应该给多大_深入进阶:图解分析JVM内存堆布局
  7. 通过信息系统项目管理师+系统集成我是如何做到的?
  8. 【山西】2021年下半年软考报考时间及通知
  9. 清空数据库部分表的数据 Oracle
  10. 笔记-组织级项目管理与大型项目管理-大型及复杂项目