在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都可以换个几万次内存点都没有加呵呵,真是防不胜防啊
最新评论