Nie mogę zmusić instrumentu do zmiany. Zmieniam wartość instrumentu, ale nie otrzymuję niczego innego na wyjściu. Mogę grać tylko na fortepianie, bez względu na to, jaką próbuję. Oto prosty kod poniżej. Czy ktoś ma jakieś sugestie? Czy też brakuje mi podstawy obiektu instrumentu?Java MIDI Synthesizer - Nie można zmienić instrumentów
import javax.sound.midi.*;
//import javax.sound.*;
public class Drum {
static int instrument = 45;
static int note = 100;
static int timbre = 0;
static int force = 100;
public static void main(String[] args) {
Synthesizer synth = null;
try {
synth = MidiSystem.getSynthesizer();
synth.open();
}
catch (Exception e) {
System.out.println(e);
}
Soundbank soundbank = synth.getDefaultSoundbank();
Instrument[] instr = soundbank.getInstruments();
synth.loadInstrument(instr[instrument]); //Changing this int (instrument) does nothing
MidiChannel[] mc = synth.getChannels();
mc[4].noteOn(note, force);
try { Thread.sleep(1000); }
catch(InterruptedException e) {}
System.out.println(instr[instrument].getName());
synth.close();
}
}
Nie można po prostu załadować instrumentu, należy również wysłać komunikat zmiany programu. Nie jestem programistą Java, więc nie wiem jak to zrobić, ale to właśnie musisz zrobić. Zobacz http://download.oracle.com/javase/1.4.2/docs/api/javax/sound/midi/Synthesizer.html#loadInstrument(javax.sound.midi.Instrument) – Brad