1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| import javax.sound.midi.*;
import java.io.*;
public class MidiSynthe {
public static void main(String[] args) {
try {
new MidiSynthe();
}
catch (Exception e) {
e.printStackTrace();
}
while (true);
}
private Synthesizer synthesizer;
private Soundbank soundBank;
private Instrument [] instruments;
private MidiChannel [] channels;
public MidiSynthe() throws MidiUnavailableException {
// initialisation midi : on déclare et on ouvre un synthétiseur
synthesizer = MidiSystem.getSynthesizer();
synthesizer.open();
// utilisation de la banque de sons par défault
soundBank = synthesizer.getDefaultSoundbank();
if (soundBank == null) {
try {
soundBank = MidiSystem.getSoundbank(new File("../lib/soundbank.gm"));
}
catch (Exception e) {
e.printStackTrace();
}
}
// obtention d'une liste des instruments contenus dans cette banque de sons
instruments = soundBank.getInstruments();
// obtention des canaux MIDI contrôlés par ce synthétiseur
channels = synthesizer.getChannels();
synthesizer.loadAllInstruments(soundBank);
// la note est ensuite jouée
/* paramètres : le canal, le numéro de la note jouée, la velocité (la vitesse à laquelle on a pressée la touche , et enfin la durée (à remplacer par des threads) */
for (int i = 0 ; i < 12 ; i++) {
playNote(channels[0], 48+i, 50, 1000);
try {
Thread.sleep(1000);
}
catch (Exception e) {
}
}
}
// jouer une note
public void playNote(MidiChannel channel, int note, int velocite, int duree) {
/* la durée doit être au moins 1 (même si c'est trop court pour être audible) */
if (duree <= 0) duree = 1;
// la note est jouée pendant la durée choisie
for (int i = 0; i < duree; i++) {
channel.noteOn(note, velocite);
}
// puis elle est arrêtée.
channel.noteOff(note);
}
} |
Partager