2008-12-19 36 views
10

Este sencillo código no produce ningún sonido en un par de máquinas que he usado para probarlo. Estoy ejecutando el código desde Eclipse, pero también he intentado utilizar la línea de comandos sin ningún resultado.Ejemplo simple de Java MIDI que no produce ningún sonido

public static void main(String[] args) 
{ 
    try { 
     Synthesizer synthesizer = MidiSystem.getSynthesizer(); 
     synthesizer.open(); 

     MidiChannel[] channels = synthesizer.getChannels(); 

     channels[0].noteOn(60, 60); 
     Thread.sleep(200); 
     channels[0].noteOff(60); 

     synthesizer.close(); 
    } catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
}

soy capaz de conseguir con éxito el sonido por conseguir un secuenciador, la adición de eventos MIDI a la secuencia, y reproducir la secuencia, pero yo estoy tratando de hacer algunos efectos de la música en tiempo real, que el secuenciador no lo hace apoyo.

¿Alguna idea?

EDITAR CON SOLUCIÓN: Resulta que el problema es que, por defecto, el JRE no viene con un banco de sonidos (interesante, entonces, que el uso del secuenciador trabajó, pero utilizando el sintetizador no lo hizo). Gracias, thejmc!

Para resolver el problema, I downloaded a soundbank from java.sun.com y lo colocó en (en WinXP) C: \ Archivos de programa \ jre1.6.0_07 \ lib \ audio (tenía que hacer la carpeta de audio).

+2

¿Están tus parlantes enchufados? :) – nickf

+0

¡Sí! (Buena pregunta, sin embargo, una vez diagnostiqué el "problema" del monitor de alguien con la misma pregunta) –

Respuesta

9

Algunas instalaciones del JRE no incluyen JavaSound soundbank.gm (para ahorrar espacio) por lo que su código no tendría una fuente de sonido para disparar en esas máquinas.

Compruebe la existencia del banco de sonidos en las máquinas que no funcionan. También puede poner el banco de sonidos en el mismo directorio que su archivo .class y lo encontrará.

Es posible añadir el banco de sonidos o de actualizar la instalación de Java en los que la máquina - el dolor de la inconsistencia, sé :)

+0

¡Sí, ese era el problema! –

0

¿Ha intentado utilizar un canal diferente? Puede ser this discusson lo acercará a una solución ...

0

He probado su código en mi máquina (Windows XP, JRE 1.6) y reproduce las notas. Quizás solo una nota es demasiado pequeña para escucharla. Intenta agregar más notas. Además, intente ajustar el volumen más alto.

0

sólo necesito 1 más acción de sueño antes del cierre del sintetizador:

public static void main(String[] args) 
{ 
    try { 
     Synthesizer synthesizer = MidiSystem.getSynthesizer(); 
     synthesizer.open(); 

     MidiChannel[] channels = synthesizer.getChannels(); 

     channels[0].noteOn(60, 60); 
     Thread.sleep(200); 
     channels[0].noteOff(60); 
     Thread.sleep(200); 

     synthesizer.close(); 
    } catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
}