Я программирую приложение для фортепиано на основе Java. Пока все работает, но сейчас у меня проблема. Это больше подробности, но это действительно плохой пользовательский опыт, поэтому я не могу оставить это так.
Вот код:
Настройка синтезатора
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);
Теперь проблема в том, что ноты не перестают играть. Только не полностью исчезают. Вы здесь их, и они не деактивируются автоматически. Я не знаю, где проблема ...
Если вам нужно больше кода или что-то еще, просто скажите это.
Было бы здорово получить ответ на эту проблему, я уже пытаюсь решить, так как более двух часов ...