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

上传人:ba****u 文档编号:55157725 上传时间:2022-02-16 格式:DOCX 页数:3 大小:9.38KB
收藏 版权申诉 举报 下载
为Java程序中添加播放MIDI音乐功能_第1页
第1页 / 共3页
为Java程序中添加播放MIDI音乐功能_第2页
第2页 / 共3页
为Java程序中添加播放MIDI音乐功能_第3页
第3页 / 共3页
资源描述:

《为Java程序中添加播放MIDI音乐功能》由会员分享,可在线阅读,更多相关《为Java程序中添加播放MIDI音乐功能(3页珍藏版)》请在装配图网上搜索。

1、为Java程序中添加播放 MIDI音乐功能2007-09-23 10:20作者: 千里冰封 出处: 论坛整理 责任编辑:方舟Java在多媒体处理方面的确优势不大,但是我们在程序中有些时候又需要一些音乐做为点缀,如果播放的音乐是wav等波形音频文件又挺大,所以背景音乐最好就是 MIDI 了,可是网上很多播放 MIDI的教程 都是简单的几句话的例子,并且没有考虑资源的释放问题,如果程序长久运行的话,就会岀现内存越耗越多的情况,以至于最后抛出一个java.Iang.OutOfMemoryError ,整个程序就挂了。在MIDI的播放中,一个类是比较重要的,那就是 MidiSystem类,它负责整个

2、MIDI播放设备等的管理,其实就是Seqencer,它就是一个 MIDI播放设置,用于播放 MIDI序列的,还有一个类叫Seqence,它就是MIDI的序列,MIDI的序列可以自己由程序生成,也可以从文件中或者URL中读取。下面我们来看一个例子吧:/* author hadeslee* Test5.java* Created on 2007-9-22, 11:16:22* To change this template, choose Tools | Templates* and open the template in the editor.*/package test1;import ja

3、va.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.MidiUnavailableE

4、xception;import javax.sound.midi.Sequenee;import javax.sound.midi.Sequencer;private Seque ncer midi;private Stri ng names=1.mid,2.mid,3.mid,4.mid,5.mid;private int i;private MapvStri ng,Seque nce map;public Test5()ini tMap();new Thread(this).start();private void initMap()try map = new HashtablevStri

5、 ng, Seque nce();midi = MidiSystem.getSequencer( false);midi.ope n();for (Str ing s : n ames) try Sequenee si = MidiSystem.getSequence( new File(s);map.put(s, si); catch (InvalidMidiDataException ex) Logger.getLogger(Test5. class.getName().log(Level.SEVERE,null, ex); catch (lOException ex) Logger.ge

6、tLogger(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 Seque nee se=map.get (n ame);midi.setSeque nce(se);midi.start(); catch (InvalidMidiDataException

7、 ex) Logger.getLogger(Test5. class.getName().log(Level.SEVERE, null, ex);try System.out.println(” 换文件了 .+(+i);String name=names( int)(Math.random()*names.length);createPlayer( name);Thread.sleep(IOOOO); catch (InterruptedException ex) Logger.getLogger(Test5. class.getName().log(Level.SEVERE, null ,

8、ex);public static void main(String args) new Test5();*/public class Test5 implements Runnablepublic void run()while (true)在这里有很重要的一点,那就是在程序运行的时候,只要一个Seqencer就可以了,我以前在程序里面每次播放的时候都生成了一个Seqencer,因为那个时候我想,我都调用它的close()方法了,它还能被打开吗?其实它还可以再度被打开的,就是这样一种惯性思维使得程序最终因内存溢岀而崩溃。现在按我这种方式播,哪怕10毫秒换一次MIDI都可以,换个几万次内存一点都没有加,呵呵,真是防不胜防啊。查看关于Java多媒体的更多文档

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!