Java MIDI: Connexion du clavier MIDI au synthétiseur par défaut


Je dois un clavier MIDI. Tout ce que je veux, c'est un exemple de la façon dont je peux configurer le synthétiseur logiciel par défaut pour jouer des sons pendant que je joue du clavier.

package cleffsgame;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.midi.MidiDevice;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;

public class CheckDevices {

    public static void main(String[] args) {
        MidiDevice device;
        // display each device's properties
        for (MidiDevice.Info info: MidiSystem.getMidiDeviceInfo()) {

            try {
                device = MidiSystem.getMidiDevice(info);

                System.out.println("\nDevice: ");
                System.out.println("Name: " + device.getDeviceInfo().getName());
                System.out.println("Vendor: " + device.getDeviceInfo().getVendor());
                System.out.println("Version: " + device.getDeviceInfo().getVersion());
                System.out.println("Description: " + device.getDeviceInfo().getDescription());
                System.out.println("Transmitters: " + device.getMaxTransmitters());
                System.out.println("Receivers: " + device.getMaxReceivers());

            } catch (MidiUnavailableException ex) {
                Logger.getLogger(CheckDevices.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

En exécutant le code ci-dessus, j'obtiens la sortie suivante:

Exécuter:

Appareil: Nom: Gervill Fournisseur: OpenJDK Version: 1.0 Description: Logiciel MIDI Synthétiseur Émetteurs: 0 Récepteurs: -1

Appareil: Nom: Oxygen 49 Fournisseur: M-Audio Version: Version inconnue Description: Oxygène 49 Émetteurs: -1 Récepteurs: 0

Appareil: Nom: Oxygen 49 Fournisseur: M-Audio Version: Version inconnue Description: Oxygène 49 Émetteurs: 0 Récepteurs: -1

Périphérique: Nom: Séquenceur temps réel Fournisseur: Version Oracle Corporation: Version 1.0 Description: Logiciel séquenceur Émetteurs: -1 Récepteurs: -1 CONSTRUIRE AVEC SUCCÈS (temps total: 2 secondes)

, Mais lorsque j'exécute le code ci-dessous, aucun son n'est joué, quand j'appuie sur les touches.

package cleffsgame;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.midi.MidiDevice;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Receiver;
import javax.sound.midi.Synthesizer;
import javax.sound.midi.Transmitter;

/**
 *
 * @author umberto
 */
public class Test {

    public static void main(String[] args) {
        MidiDevice inputDevice = null, synthDevice = null;
        Transmitter transmitter = null;
        Synthesizer synthesizer = null;
        Receiver receiver = null;

        try {
            inputDevice = MidiSystem.getMidiDevice(MidiSystem.getMidiDeviceInfo()[1]);
            synthDevice = MidiSystem.getMidiDevice(MidiSystem.getMidiDeviceInfo()[0]);

        } catch (MidiUnavailableException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }

        // goodDevice must be Oxygen 49 transmitter (MIDI Input)
        if (inputDevice != null && synthDevice != null) {
            try {
                transmitter = inputDevice.getTransmitter();
                System.out.println("Transmitter: " + inputDevice.getDeviceInfo());
                System.out.println(String.format("T/R: %s/%s", inputDevice.getMaxTransmitters(), inputDevice.getMaxReceivers()));

                receiver = synthDevice.getReceiver();
                System.out.println("Receiver: " + synthDevice.getDeviceInfo());
                System.out.println(String.format("T/R: %s/%s", synthDevice.getMaxTransmitters(), synthDevice.getMaxReceivers()));

                transmitter.setReceiver(receiver);
                System.out.println("GoodDevice is open... check sound\n");
                inputDevice.open();
                synthDevice.open();

            } catch (Exception ex) {
                Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }


}

Il semble qu'il y ait plus à faire que de connecter un synthétiseur.récepteur à une entréeappareil.émetteur comme je l'ai obtenu des documents https://docs.oracle.com/javase/tutorial/sound/MIDI-synth.html .

Author: umberto_jr, 2016-06-01

1 answers

, Il pourrait être une bonne idée d'ouvrir les appareils avant d'acquérir leur émetteur/récepteur.

Mais le problème réel est que ce programme se ferme immédiatement, donc les périphériques ne sont pas ouverts pendant un temps utile.

 0
Author: CL., 2016-06-01 06:36:15