Comment lire un fichier MIDI à l'aide de l'API Java Sound (spécifiez le périphérique MIDI à utiliser)

introduction

Ceci est une continuation de l'article précédent (https://qiita.com/absol_abcX/items/e9c230b808e522154ae5).

Aperçu

Implémentez la fonction de sélection de synthétiseur MIDI à utiliser dans l'échantillon de lecture de fichier MIDI précédent. Ci-dessous se trouve l'écran d'exécution réel.

[0] Gervill
[1] LoopBe Internal MIDI
[2] Microsoft MIDI Mapper
[3] CoolSoft MIDIMapper
[4] Microsoft GS Wavetable Synth
[5] VirtualMIDISynth #1
[6] LoopBe Internal MIDI
[7] Real Time Sequencer

Entrez le numéro de l'appareil MIDI à utiliser>> 4
[Microsoft GS Wavetable Synth]Est ouvert...

Chemin du fichier MIDI>> sample.mid
En jouant...
Entrez la chaîne de caractères appropriée pour terminer.
>>a
Arrêtez

Au fait, Le 0ème appareil appelé "Gervill" est un synthétiseur MIDI fourni par la bibliothèque Java. Par défaut, ce périphérique est spécifié.

Le "Microsoft GS Wavetable Synth" utilisé cette fois est un synthétiseur fourni en standard avec Windows.

Exemple de code

SamplePlayer.java


import java.io.File;
import java.io.IOException;
import java.util.Scanner;

import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiDevice;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Receiver;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;

public class SamplePlayer {

    public static void main(String[] args) {
        //Matériel pour lire les données MIDI/Une instance d'un périphérique logiciel.
        Sequencer sequencer = null;

        Scanner scanner = new Scanner(System.in);

        try {
            //Obtenez une instance de Sequencer.
            sequencer = MidiSystem.getSequencer(false);

            //Ouvrez l'appareil et acquérez des ressources.
            sequencer.open();

            //Obtenez une liste des appareils MIDI disponibles.
    		MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
    		for (int i=0; i<infos.length; i++) {
    			String line = String.format("[%s] %s", i, infos[i].getName());
    			System.out.println(line);
    		}
    		System.out.println();

    		int index = 0;
    		while (true) {
    			//Obtenez l'index du périphérique MIDI à utiliser à partir de l'entrée de la console.
	    		System.out.print("Entrez le numéro de l'appareil MIDI à utiliser>> ");
	    		String str = scanner.next();

	    		try {
	    			index = Integer.parseInt(str);
	    		}
	    		catch (NumberFormatException nfe) {
	    			continue;
	    		}
	    		break;
	    	}

    		//Demandez un appareil MIDI avec des informations sur l'appareil qui représentent l'appareil intéressant le système.
    		MidiDevice device = MidiSystem.getMidiDevice(infos[index]);

    		System.out.println("[" + device.getDeviceInfo().getName() + "]Est ouvert...");

    		//Ouvrez un appareil MIDI.
    		if (device.isOpen() == false) {
    			device.open();
    		}

    		//Connectez la prise MIDI OUT du séquenceur à la prise MIDI IN de l'appareil MIDI.
			Receiver receiver = device.getReceiver();
			sequencer.getTransmitter().setReceiver(receiver);
        }
        catch (MidiUnavailableException e) {
            e.printStackTrace();
        }
        System.out.println();

        //Obtenez le chemin du fichier MIDI à partir de l'entrée de la console.
        System.out.print("Chemin du fichier MIDI>> ");
        String path = scanner.next();

        try {
            //Données MIDI d'un fichier MIDI(Objet de séquence)Avoir.
            File file = new File(path);
            Sequence sequence = MidiSystem.getSequence(file);

            //Définissez les données MIDI acquises dans le séquenceur.
            sequencer.setSequence(sequence);
        }
        catch (InvalidMidiDataException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }

        //Lecture du séquenceur
        sequencer.start();
        System.out.println("En jouant...");

        //En attente de la saisie de la clé
        System.out.println("Entrez la chaîne de caractères appropriée pour terminer.");
        System.out.print(">>");
        scanner.next();
        scanner.close();

        //Arrêt du séquenceur
        sequencer.stop();
        System.out.println("Arrêtez");

        //Fermez le séquenceur et libérez les ressources que vous utilisiez.
        sequencer.close();
    }
}

Commentaire

Obtenir une liste des informations disponibles sur les appareils

Obtient un tableau d'objets de toutes les informations de périphérique MIDI disponibles.

//Obtenez une liste des appareils MIDI disponibles.
MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();

Obtenir un objet appareil

Vous pouvez obtenir le périphérique correspondant en appelant getMidiDevice à l'aide de l'objet d'informations sur le périphérique obtenu. Sur l'appareil acquis, rendez-le opérationnel en appelant open.

//Demandez un appareil MIDI avec des informations sur l'appareil qui représentent l'appareil intéressant le système.
MidiDevice device = MidiSystem.getMidiDevice(infos[index]);

//Ouvrez un appareil MIDI.
if (device.isOpen() == false) {
   device.open();
}

Connectez le séquenceur et l'appareil

Il existe deux interfaces fournies par la classe d'appareils MIDI:

Nom de l'interface Aperçu Couramment utilisé
Transmitter Envoyez des données MIDI. Séquenceur, périphérique d'entrée MIDI, etc.
Receiver Recevez des données MIDI. Synthétiseur / périphérique de sortie MIDI

Cette fois, connectez le port de réception MIDI (récepteur) de l'appareil MIDI spécifié au port d'envoi MIDI (émetteur) du séquenceur.

//Connectez la prise MIDI OUT du séquenceur à la prise MIDI IN de l'appareil MIDI.
Receiver receiver = device.getReceiver();
sequencer.getTransmitter().setReceiver(receiver);

Ensuite, l'image de configuration ressemblera à ceci. Configuration du périphérique.png

Ceci termine la connexion de l'appareil.

Recommended Posts

Comment lire un fichier MIDI à l'aide de l'API Java Sound (spécifiez le périphérique MIDI à utiliser)
Comment lire un fichier MIDI à l'aide de l'API Java Sound
[Java] Comment utiliser la méthode toString ()
Etudier comment utiliser le constructeur (java)
[Traitement × Java] Comment utiliser la boucle
[Traitement × Java] Comment utiliser la classe
[Traitement × Java] Comment utiliser la fonction
[Java] Comment utiliser la classe Calendar
Comment utiliser l'API Java avec des expressions lambda
Comment utiliser la méthode replace () (Java Silver)
Résumé de l'API de communication Java (1) Comment utiliser Socket
Résumé de l'API de communication Java (3) Comment utiliser SocketChannel
Comment utiliser Play Framework sans utiliser l'activateur de sécurité
Résumé de l'API de communication Java (2) Comment utiliser HttpUrlConnection
Comment utiliser l'API Chain
[Java] Comment utiliser Map
Comment utiliser java Facultatif
Comment utiliser la classe Java
[Java] Comment utiliser removeAll ()
Comment utiliser Java Map
Comment utiliser les variables Java
Comment utiliser Maven pour placer des fichiers de ressources en dehors de JAR
[À voir absolument pour l'apprenti ingénieur Java] Comment utiliser l'API Stream
Je souhaite utiliser l'API Java 8 DateTime lentement (maintenant)
Comment appeler et utiliser l'API en Java (Spring Boot)
Comment utiliser HttpClient de Java (Get)
Comment utiliser la méthode form_with
[java8] Pour comprendre l'API Stream
Comment désassembler un fichier de classe Java
Comment utiliser HttpClient de Java (Post)
[Java] Comment utiliser la méthode de jointure
Comment utiliser la classe wrapper
[Traitement × Java] Comment utiliser les variables
Comment décompiler un fichier de classe Java
[JavaFX] [Java8] Comment utiliser GridPane
Comment utiliser les méthodes de classe [Java]
[Java] Comment utiliser List [ArrayList]
Comment utiliser les classes en Java?
[Traitement × Java] Comment utiliser les tableaux
Comment utiliser les expressions Java lambda
[Java] Comment utiliser la classe Math
Comment utiliser le type enum Java
Pour utiliser l'outil de ligne de commande "java" ... Comment éviter d'apparaître
Comment résoudre l'erreur inconnue apparue lors de l'utilisation de slf4j en Java
L'opérateur qui est né pour naître, instanceof (Java) ~ Comment utiliser l'opérateur instanceof ~
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Comment utiliser binding.pry pour afficher le fichier
Comment utiliser BootStrap avec Play Framework
Essayez d'utiliser l'API Stream en Java
Comment utiliser la méthode de soumission (Java Silver)
[Java] Comment calculer l'âge à l'aide de LocalDate