2008-12-19 16 views
10

Dieser einfache Code produziert auf einigen Maschinen, die ich zum Testen verwendet habe, keinen Ton. Ich führe den Code in Eclipse aus, aber ich habe auch versucht, die Befehlszeile zu missbrauchen.Einfaches Java MIDI-Beispiel, das keinen Ton erzeugt

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

Ich bin in der Lage erfolgreich Sound zu erhalten, indem ein Sequencer bekommen, MIDI-Events der Sequenz hinzugefügt, und die Sequenz zu spielen, aber ich versuche, einige Echtzeit-Musik-Effekte zu tun, die der Sequenzer nicht Unterstützung.

Irgendwelche Ideen?

BEARBEITEN MIT LÖSUNG: Es stellt sich heraus, dass das JRE standardmäßig nicht mit einer Soundbank ausgestattet ist (interessant, dass die Verwendung des Sequencers funktionierte, aber nicht mit dem Synthesizer). Danke, thejmc!

Um das Problem zu lösen, ich downloaded a soundbank from java.sun.com und legte es (auf WinXP) C: \ Programme \ jre1.6.0_07 \ lib \ audio (musste den Audio-Ordner).

+2

Sind Ihre Lautsprecher angeschlossen? :) – nickf

+0

Ja! (Gute Frage, obwohl - ich habe einmal diagnostiziert jemandes Monitor "Problem" mit der gleichen Frage) –

Antwort

9

Einige Installationen der JRE enthalten nicht die JavaSound soundbank.gm (um Platz zu sparen), damit Ihr Code auf diesen Rechnern keine Tonquelle auslösen kann.

Überprüfen Sie die Existenz der Soundbank auf den Maschinen, die nicht funktionieren. Sie können die Soundbank auch in das gleiche Verzeichnis wie Ihre .class-Datei stellen, und sie wird es finden.

Es ist möglich, die Soundbank hinzuzufügen, oder die Java-Installation auf solche Maschine zu aktualisieren - den Schmerz der Inkonsistenz, ich weiß :)

+0

Ja, das war das Problem! –

0

Haben Sie versucht, einen anderen Kanal zu verwenden? Mai werden this discusson werden Sie näher an eine Lösung ...

0

Ich habe Ihren Code in meinem Computer (Windows XP, JRE 1.6) getestet und es spielt die Notizen. Vielleicht ist nur eine einzige Note zu wenig, um sie zu hören. Versuchen Sie, weitere Notizen hinzuzufügen. Versuchen Sie auch, die Lautstärke lauter einzustellen.

0

Nur 1 vor dem Schließen Synthesizer mehr Schlaf brauchen Aktion:

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