為Java程序中添加播放MIDI音樂(lè)功能_第1頁(yè)
為Java程序中添加播放MIDI音樂(lè)功能_第2頁(yè)
為Java程序中添加播放MIDI音樂(lè)功能_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、為 java 程序中添加播放midi音樂(lè)功能2007-09-23 10:20 千里冰封出處:論壇整理責(zé)任編輯: 方舟java 在多媒體 處理方面確實(shí)優(yōu)勢(shì)不大,但是我們?cè)诔绦?中有些時(shí)候又需要一些音樂(lè)做為點(diǎn)綴,如果播放的音樂(lè)是 wav 等波形音頻文件,又挺大 ,所以背景音樂(lè)最好就是midi 了,可是網(wǎng)上很多播放midi 的教程都是簡(jiǎn)單的幾句話的例子,并且沒(méi)有考慮資源的釋放問(wèn)題,如果程序長(zhǎng)久運(yùn)行的話,就會(huì)出現(xiàn)內(nèi)存越耗越多的情況,以至于最后拋出一個(gè)java.lang.outofmemoryerror ,整個(gè)程序就掛了。在 midi 的播放中,一個(gè)類是比較重要的,那就是midisystem 類,它負(fù)責(zé)

2、整個(gè)midi播放設(shè)備等的管理,其實(shí)就是seqencer,它就是一個(gè)midi播放設(shè)置,用于播放midi 序列的,還有一個(gè)類叫seqence,它就是 midi 的序列 ,midi 的序列可以自己由程序生成,也可以從文件中或者url 中讀取。下面我們來(lái)看一個(gè)例子吧:/* * 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.midiuna

4、vailableexception; import javax.sound.midi.sequence; import javax.sound.midi.sequencer; /* * * author hadeslee */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 map; public test5() initmap(); new thread(thi

5、s).start(); private void initmap() try map = new hashtable(); 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

6、, 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)

7、; midi.start(); catch (invalidmididataexception ex) logger.getlogger(test5. class.getname().log(level.severe, null, ex); public void run() while (true) 學(xué)習(xí)文檔僅供參考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(); 在這里有很重要的一點(diǎn),那就是在程序運(yùn)行的時(shí)候,只要一個(gè)seqencer就可以了,我以前在程序里面每次播放的時(shí)候都生成了一個(gè)seqencer,因?yàn)槟莻€(gè)時(shí)候我想,我都調(diào)用它的close()方法

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論