Ceci est une continuation de l'article précédent (https://qiita.com/absol_abcX/items/e9c230b808e522154ae5).
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.
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();
}
}
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();
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();
}
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.
Ceci termine la connexion de l'appareil.
Recommended Posts