1
我正在编程一个基于Java的钢琴应用程序。一切工作到目前为止,但现在我有一个问题。这更多的是细节,但这是一个非常糟糕的用户体验,所以我不能这样离开它。关闭midi合成器回声
下面是一些代码:
合成器设置
try {
synthesizer = MidiSystem.getSynthesizer();
synthesizer.open();
synthesizer.loadAllInstruments(synthesizer.getDefaultSoundbank());
} catch (MidiUnavailableException e) {
e.printStackTrace();
}
try {
synthReceiver = synthesizer.getReceiver();
} catch (MidiUnavailableException e) {
e.printStackTrace();
}
// load instrument's configuartion
int instrumentNumber = settings.getInteger("sound.instrument", 0);
Instrument instrument = synthesizer.getDefaultSoundbank().getInstruments()[instrumentNumber];
// Set the instrument on channel 0
ShortMessage message = new ShortMessage();
try {
message.setMessage(ShortMessage.PROGRAM_CHANGE, 0, instrumentNumber, 0);
} catch (InvalidMidiDataException ex) {
Logger.getLogger(TypePiano.class.getName()).log(Level.SEVERE, null, ex);
}
synthReceiver.send(message, -1);
synthesizer.loadInstrument(instrument);
synthesizer.getChannels()[0].programChange(instrumentNumber);
弹奏音符
// create the message
ShortMessage message = new ShortMessage();
try {
message.setMessage(ShortMessage.NOTE_ON, settings.getInteger("piano.instrument", 1), note, 100);
} catch (InvalidMidiDataException e) {
e.printStackTrace();
}
// send it
synthReceiver.send(message, -1);
// and update note stand
noteStand.notePlayed(note);
现在的问题是,票据,不停止播放。只是不会完全消失。你在这里,他们不会自动停用。我不知道问题出在哪里......
如果你需要更多的代码,或者其他的只是说出来。
会很酷得到这个问题的答案,我已经开始尝试,因为两个多小时来解决......
谢谢。我已经使用Note Off Messages播放了一些内容,但是我没有启用它。现在与注意与0速度它工作:) – evotopid 2012-02-27 20:49:14
@evotopid,并非所有的合成器响应笔记关闭,所以问题可能不是你。 – Brad 2012-02-28 17:05:42