Frage

Dieser einfache Code erzeugt keinen Ton auf ein paar Maschinen, die ich verwendet habe, um es zu testen. Ich bin mit dem Code aus Eclipse, aber ich habe auch die Befehlszeile ohne Erfolg versucht, mit.

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, das Hinzufügen von MIDI-Events an die Sequenz, und spielt die Reihenfolge, aber ich versuche, einige Echtzeit-Musik-Effekte zu tun, die der Sequenzer nicht unterstützt werden.

Irgendwelche Ideen?

EDIT mit Lösung: Es stellt sich das Problem, ist, dass in der Standardeinstellung ist die JRE nicht mit einer Soundbank kommen (interessant, dann, dass der Sequencer gearbeitet, aber mit dem Synthesizer didn ‚t). Danke, thejmc !

Um das Problem zu lösen, ich heruntergeladen Soundbank von java.sun .com und legte sie in (auf WinXP). C: \ Programme \ jre1.6.0_07 \ lib \ Audio (mußte den Audio-Ordner)

War es hilfreich?

Lösung

Einige Installationen der JRE enthalten nicht den Javasound soundbank.gm (um Platz zu sparen), so würde den Code nicht eine Schallquelle auf diesen Maschinen auslösen hat.

Nach der Existenz der Soundbank auf den Maschinen, die nicht funktionieren. Sie können auch die Soundbank im gleichen Verzeichnis wie die .class-Datei setzen, und es wird es finden.

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

Andere Tipps

Haben Sie versucht, anderen Kanal zu benutzen? Kann sein, dieser discusson näher an einer Lösung erhalten wird ...

Ich habe den Code in meinem Rechner (Windows XP, JRE 1.6) getestet und es funktioniert die Noten spielen. Vielleicht nur eine einzige Note ist zu wenig, es zu hören. Versuchen Sie, mehr Notizen hinzufügen. Versuchen Sie auch, die Lautstärke lauter eingestellt werden.

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

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();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top