Pregunta

Este código simple no produce ningún sonido en un par de máquinas que he utilizado para probarlo. Estoy corriendo el código desde dentro de Eclipse, pero también he intentado usar la línea de comandos en vano.

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 admite.

¿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 didn 't). Gracias, thejmc !

Para resolver el problema, descargado un banco de sonidos de java.sun .com y lo colocó en un (a WinXP.) C: \ archivos de programa \ jre1.6.0_07 \ lib \ audio (tenía que hacer que la carpeta de audio)

¿Fue útil?

Solución

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

Comprobar la existencia del banco de sonidos en las máquinas que no funcionan. También se puede poner el banco de sonidos en el mismo directorio que el 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, lo sé:)

Otros consejos

¿Ha intentado utilizar diferentes canales? Puede ser este discusson nos puede acercar más a una solución ...

He probado el código en mi máquina (Windows XP, JRE 1.6) y lo hace tocar las notas. Tal vez sólo una sola nota es demasiado poco para escucharlo. Trate de añadir más notas. Además, trate de establecer el volumen más alto.

Sólo hay 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();
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top