studio programacion para libros gratis ediciĆ³n desarrollo desarrollar aprende aplicaciones java audio midi

java - para - programacion android pdf 2018



El teclado midi no funciona en todas las plataformas. (1)

Los bancos de sonido MIDI, en Java, están sujetos a restricciones de licencia y no se envían de forma predeterminada para todas las plataformas ( http://java.sun.com/products/java-media/sound/soundbanks.html ) y requieren una descarga por separado y una Configuración de varios pasos para trabajar.

La Respuesta : Gervill

http://java.net/projects/gervill/pages/Home

Gervill fue diseñado para ser sintetizador genérico para Java. Al agregar gervill.jar a su ruta de clases, debería poder cargar archivos SoundFonts / DLS usando MidiSystem.getSoundBank (). Y MidiSystem.getSynthesizer () debería devolver la instancia de Gervill Synthesizer.

Es una implementación java 100% pura de código abierto de los bancos de sonidos MIDI generales. Simplemente suelta gervill.jar en el classpath y eso es todo. Tus bancos de sonido gm estarán disponibles para tu aplicación.

Hice una aplicación de teclado hace un tiempo que obtiene un banco de sonido midi como un recurso de un frasco, 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 suns java 6 y en linux que usa suns 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 del instrumento no se ha cargado cuando se llama al método getInstrumentName() . La matriz de instrumentos se llena en el constructor de la clase DefaultControl (segundo ejemplo de código). ¿Podría alguien ayudarme a comprender por qué este sería el caso y por qué parece depender de la máquina?

Me sale el nombre del instrumento actual de esta manera:

data.setControls(new DefaultControls()); data.setKeyboard(new KeyboardPanel(data.getPressed())); data.getKeyboard().setInstrumentName(data.getControls().getInstrumentName());

Recibo y cargué el banco de sonido así:

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 este:

public String getInstrumentName(){ return instrument[selected_instrument].getName(); }