Question

Ce code simple ne produit aucun son sur deux machines que j'ai utilisé pour tester. Je suis en cours d'exécution du code à partir d'Eclipse, mais je l'ai aussi essayé d'utiliser la ligne de commande en vain.

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();
    }
}

Je suis en mesure d'obtenir avec succès son en obtenant un séquenceur, l'ajout d'événements MIDI à la séquence, et la lecture de la séquence, mais je suis en train de faire des effets de la musique en temps réel, que le séquenceur ne prend pas en charge.

Toutes les idées?

EDIT AVEC LA SOLUTION: Il se trouve le problème est que, par défaut, le JRE ne vient pas avec une banque de sons (intéressant, alors, que l'utilisation du séquenceur travaillé, mais en utilisant le synthétiseur didn « t). Merci, thejmc !

Pour résoudre le problème, je téléchargé un soundbank de java.sun .com et placé dans (sur Windows XP) C:. \ Program Files \ jre1.6.0_07 \ lib \ audio (dû faire le dossier audio)

Était-ce utile?

La solution

Certaines installations du JRE ne comprennent pas les soundbank.gm JavaSound (afin d'économiser de l'espace) de sorte que votre code serait pas une source sonore pour déclencher sur ces machines.

Vérifier l'existence de la soundbank sur les machines qui ne fonctionnent pas. Vous pouvez aussi mettre le soundbank dans le même répertoire que votre fichier .class et il le trouver.

Il est possible d'ajouter le ou soundbank pour mettre à niveau Java installer sur les machines - la douleur d'incohérence, je sais:)

Autres conseils

Avez-vous essayé d'utiliser le canal différent? Peut-être ce discusson vous se rapprocher d'une solution ...

Je l'ai testé votre code dans ma machine (Windows XP, JRE 1.6) et il ne joue les notes. Peut-être une seule note est trop peu pour l'entendre. Essayez d'ajouter d'autres notes. Aussi, essayez de régler le plus fort volume.

Juste besoin 1 plus d'action de sommeil avant synthétiseur proche:

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();
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top