作者softmm (软绵绵)
看板java
标题[问题] 只能发出同一种乐器的同一个音
时间Sat May 25 16:44:45 2013
大家好
我在练习"深入浅出"书中的范例 "MiniMusicCmdLine"
但是照着书本打完并输入不同参数(包含乐器种类和音符)後
却只有跑出同一种乐器(应该是钢琴?)的同一个音
并且有出现WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at
root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5'
不确定跟这个Warning是否有关
好像要更动regedit的东西才能改善这个Warning,但听说有风险,所以还没尝试
谢谢大家
程式码如下:
import javax.sound.midi.*;
public class MiniMusicCmdLine {
public static void main(String[] args) {
MiniMusicCmdLine mini = new MiniMusicCmdLine();
if(args.length < 2){
System.out.println("Balabalabala");
}else{
int instrument = Integer.parseInt(args[0]);
int note = Integer.parseInt(args[1]);
mini.play(instrument, note);
}
}
public void play(int instrument, int note){
try{
Sequencer player = MidiSystem.getSequencer();
player.open();
Sequence seq = new Sequence(Sequence.PPQ, 4);
Track track = seq.createTrack();
MidiEvent event = null;
ShortMessage first = new ShortMessage();
first.setMessage(192, 1, instrument, 0);
MidiEvent changeInstrument = new MidiEvent(first,1);
track.add(changeInstrument);
ShortMessage a = new ShortMessage();
a.setMessage(144, 1, note, 100);
MidiEvent noteOn = new MidiEvent(a,1);
track.add(noteOn);
ShortMessage b = new ShortMessage();
a.setMessage(128, 1, note, 100);
MidiEvent noteOff = new MidiEvent(b,16);
track.add(noteOff);
player.setSequence(seq);
player.start();
Thread.sleep(5000);
player.close();
System.exit(0);
}catch (Exception ex){
ex.printStackTrace();
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.244.122
1F:→ tianman:b的部分要改成b.setMessage 05/31 09:37