Domanda

Questo semplice codice non produce alcun suono su un paio di macchine che ho usato per testarlo. Sono in esecuzione il codice all'interno di Eclipse, ma ho anche provato ad utilizzare la riga di comando senza alcun risultato.

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

Sono in grado di ottenere con successo il suono da ottenere un sequencer, aggiungendo eventi MIDI alla sequenza, e giocare la sequenza, ma io sto cercando di fare alcuni effetti di musica in tempo reale, che il sequencer non supporta.

Tutte le idee?

Modifica con la soluzione: Si scopre che il problema è che, per impostazione predefinita, il JRE non viene fornito con un SoundBank (interessante, quindi, che utilizzando il Sequencer ha funzionato, ma utilizzando il sintetizzatore didn 't). Grazie, thejmc !

Per risolvere il problema, ho scaricato un soundbank da java.sun .com e lo mise in un (a WinXP) C:. \ Program Files \ jre1.6.0_07 \ lib \ audio (dovuto rendere la cartella audio)

È stato utile?

Soluzione

Alcune installazioni di JRE non includono il soundbank.gm JavaSound (per risparmiare spazio) in modo che il codice non avrebbe una sorgente sonora per innescare su quelle macchine.

Controlla l'esistenza del soundbank sulle macchine che non funzionano. Si può anche mettere il soundbank nella stessa directory del file .class e lo troverete.

E 'possibile aggiungere il soundbank o per aggiornare il Java installato su quelli della macchina - il dolore di incoerenza, lo so:)

Altri suggerimenti

Hai provato a usare il canale diverso? Può essere questo discusson ti porterà più vicino a una soluzione ...

Ho provato il codice in mia macchina (Windows XP, JRE 1.6) e lo fa suonare le note. Forse solo una singola nota è troppo poco per sentirlo. Cercate di aggiungere ulteriori note. Inoltre, cercare di impostare il più alto volume.

solo bisogno di più 1 azione di sonno prima della chiusura sintetizzatore:

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();
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top