Java Language Jouer un fichier MIDI


Exemple

Les fichiers MIDI peuvent être lus en utilisant plusieurs classes du package javax.sound.midi . Un Sequencer effectue la lecture du fichier MIDI et plusieurs de ses méthodes peuvent être utilisées pour définir des commandes de lecture telles que le nombre de boucles, le tempo, la mise en sourdine et autres.

La lecture générale des données MIDI peut être effectuée de cette manière:

import java.io.File;
import java.io.IOException;
import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;

public class MidiPlayback {
    public static void main(String[] args) {
        try {
            Sequencer sequencer = MidiSystem.getSequencer(); // Get the default Sequencer
            if (sequencer==null) {
                System.err.println("Sequencer device not supported");
                return;
            } 
            sequencer.open(); // Open device
            // Create sequence, the File must contain MIDI file data.
            Sequence sequence = MidiSystem.getSequence(new File(args[0]));
            sequencer.setSequence(sequence); // load it into sequencer
            sequencer.start();  // start the playback
        } catch (MidiUnavailableException | InvalidMidiDataException | IOException ex) {
            ex.printStackTrace();
        }
    }
}

Pour arrêter la lecture, utilisez:

sequencer.stop(); // Stop the playback

Un séquenceur peut être configuré pour mettre en sourdine une ou plusieurs pistes de la séquence pendant la lecture, de sorte qu'aucun des instruments de la lecture spécifiée ne soit lu. L'exemple suivant définit la première piste de la séquence à mettre en sourdine:

import javax.sound.midi.Track;
// ...

Track[] track = sequence.getTracks();
sequencer.setTrackMute(track[0]);

Un séquenceur peut jouer une séquence à plusieurs reprises si le compte de boucle est donné. Ce qui suit permet au séquenceur de jouer une séquence quatre fois et indéfiniment:

sequencer.setLoopCount(3);
sequencer.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);

Le séquenceur ne doit pas toujours jouer la séquence depuis le début, ni jouer la séquence jusqu'à la fin. Il peut commencer et se terminer à tout moment en spécifiant la coche dans la séquence pour commencer et se terminer. Il est également possible de spécifier manuellement quelle coche dans l'ordre dans lequel le séquenceur doit jouer:

sequencer.setLoopStartPoint(512);
sequencer.setLoopEndPoint(32768);
sequencer.setTickPosition(8192);

Les séquenceurs peuvent également lire un fichier MIDI à un certain tempo, qui peut être contrôlé en spécifiant le tempo en battements par minute (BPM) ou en microsecondes par quart de note (MPQ). Le facteur auquel la séquence est jouée peut également être ajusté.

sequencer.setTempoInBPM(1250f);
sequencer.setTempoInMPQ(4750f);
sequencer.setTempoFactor(1.5f);

Lorsque vous avez fini d'utiliser le Sequencer , rappelez-vous de le fermer

sequencer.close();