2008-12-19 5 views
10

Ce code simple ne produit aucun son sur un ou deux ordinateurs que j'ai utilisé pour le tester. Je cours le code depuis Eclipse, mais j'ai aussi essayé d'utiliser la ligne de commande en vain.Exemple Java simple MIDI ne produisant aucun son

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 fonctionne pas soutien.

Des 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 n'a pas). Merci, thejmc!

Pour résoudre le problème, j'ai downloaded a soundbank from java.sun.com et placé dans (sur WinXP) C: \ Program Files \ jre1.6.0_07 \ lib \ audio (a dû faire le dossier audio).

+2

vos enceintes sont-elles branchées? :) – nickf

+0

Oui! (Bonne question, cependant - J'ai une fois diagnostiqué quelqu'un "problème" moniteur avec la même question) –

Répondre

9

Certaines installations du JRE n'incluent pas JavaSound soundbank.gm (afin d'économiser de l'espace) afin que votre code n'ait pas de source sonore à déclencher sur ces machines.

Vérifiez l'existence de la banque de sons sur les machines qui ne fonctionnent pas. Vous pouvez également placer la banque de sons dans le même répertoire que votre fichier .class et le trouver.

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

+0

Oui, c'était le problème! –

0

Avez-vous essayé d'utiliser un autre canal? Peut être this discusson vous rapproche d'une solution ...

0

J'ai testé votre code dans ma machine (Windows XP, JRE 1.6) et il lit les notes. Peut-être qu'une seule note est trop petite pour l'entendre. Essayez d'ajouter plus de notes. Essayez également de régler le volume plus fort.

0

juste besoin 1 plus d'action de sommeil avant synthétiseur à proximité:

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