Hace un tiempo hice keyboard application que obtiene un banco de sonidos midi como recurso de un jar, y lo usa para obtener los nombres de los instrumentos contenidos en el banco de sonidos. Esto parece funcionar bien en máquinas que usan Windows 7 con soles java 6 y en Linux usando soles java 6. Sin embargo, esto no parece funcionar en máquinas que usan Windows XP usando la misma versión de java. Lo que parece estar sucediendo es que la matriz de instrumentos no se ha cargado cuando se llama al método getInstrumentName()
. El conjunto de instrumentos se rellena en el constructor de la clase DefaultControl
(segundo ejemplo de código). ¿Podría alguien ayudarme a entender por qué sería este el caso, y por qué parece ser dependiente de la máquina?midi keyboard no funciona en todas las plataformas
me sale el nombre del instrumento actual de la siguiente manera:
data.setControls(new DefaultControls());
data.setKeyboard(new KeyboardPanel(data.getPressed()));
data.getKeyboard().setInstrumentName(data.getControls().getInstrumentName());
me sale y cargar el banco de sonidos como esto:
this.synth=MidiSystem.getSynthesizer();
synth.open();
synth.loadAllInstruments(
MidiSystem.getSoundbank(
getClass().getResourceAsStream("soundbank.gm")));
this.instrument=synth.getAvailableInstruments();
this.channels=synth.getChannels();
Este es el método que se llama para cargar el nombre es la siguiente:
public String getInstrumentName(){
return instrument[selected_instrument].getName();
}
¿Alguna excepción? Posible error JDK? http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4444193 – monojohnny
Es una excepción de índice de matriz fuera de límites que se lanza. Es extraño porque el nombre get solo se invocaría si no se lanzaron errores y el banco de sonidos se cargó correctamente. –
Esto podría estar relacionado con el error al que hizo referencia. Lo investigaré. –