L'application ou l'applet créée avec Java-MidiShare joue la musique en l'envoyant à MidiShare, qui la redirige soit vers un port externe (modem ou série), soit vers un synthé logiciel. L'application msConnect
permet de sélectionner le port "modem" comme port de sortie de MidiShare.
Macintosh : Pour jouer sur le synthé logiciel QuickTime, il faut connecter l'applet et l'application msExpander
. Pour connecter l'applet à un autre synthé logiciel reconnaissant l'IAC d'Opcode (Inter Application Communication), utiliser l'application msOMS
.
import grame.midishare.* ;
import java.applet.*;
public class Note extends Applet {
int ourRefNum;
int expanderRefNum;
public void start() {
ourRefNum = Midi.Open("Essai");
expanderRefNum = Midi.GetNamedAppl("msExpander");
Midi.Connect(ourRefNum, expanderRefNum, 1); // 1 pour "vrai"
int dateinit = Midi.GetTime();
pouet(60, dateinit); // do3
pouet(65, dateinit+1000); // fa3
pouet(70, dateinit+2000); // sib3
}
public void pouet(int pitch, int date) {
int event = Midi.NewEv(Midi.typeNote);
if (event != 0) {
Midi.SetPort( event , 0) ;
Midi.SetChan( event , 0) ;
Midi.SetField( event , 0 , pitch ) ; // field 0 = pitch
Midi.SetField( event , 1 , 80) ; // field 1 = velocity
Midi.SetField( event , 2 , 1000) ; // field 2 = duration
Midi.SendAt(ourRefNum, event, date ) ;
}
}
public void stop() {
Midi.Close(ourRefNum);
}
}
La méthode pouet joue une note définie par sa hauteur et sa date.
La méthode start ouvre une application en lui attribuant un numéro MidiShare, la connecte à msExpander (qui doit être chargé), puis joue les trois notes do3, fa3, sib3 à partir de la date courante, en envoyant les événements correspondant à msExpander.
<HTML> <HEAD> <TITLE>Marc Chemillier - Projets Licence-Maîtrise</TITLE> </HEAD> <BODY> <H2>Applet pour jouer trois notes avec MidiShare</H2> <p> Fenêtre de l'applet: 50 de hauteur, 200 de largeur <p> <APPLET CODE="Note.class" WIDTH=200 HEIGHT=50> </APPLET> </BODY> </HTML>
import grame.midishare.* ;
import grame.midishare.player.* ;
import grame.midishare.midifile.* ;
import java.applet.*;
import java.net.*;
public class Seq extends Applet {
private MidiFileInfos info = new MidiFileInfos();
int ourRefNum;
URL coco;
public void start () {
ourRefNum = MidiPlayer.Open("Sequence");
Midi.Connect(ourRefNum, 0, 1);
try { coco = new URL(getCodeBase(), "boo3.mid");
charge(coco);
} catch (MalformedURLException pb1) { }
catch (Exception pb2) { }
MidiPlayer.Start(ourRefNum);
}
public void charge (URL filename) throws Exception{
int seq = Midi.NewSeq();
if (seq != 0) {
MidiFileStream toto = new MidiFileStream();
toto.Load(filename, seq, info);
MidiPlayer.SetAllTrack(ourRefNum, seq, info.clicks);
} else {
throw new MidiException ("No more MidiShare event");}
}
public void stop() {
MidiPlayer.Close(ourRefNum);
}
}
La méthode charge ouvre le fichier boo3.mid et place le contenu dans la séquence seq. Le chargement du fichier nécessite la gestion de deux exceptions (pour prévenir les problèmes de fichier non trouvé, de mémoire saturée, etc.), d'où la construction try { } catch { } catch { }.
La méthode start ouvre un objet de la classe MidiPlayer connecté à MidiShare en lui attribuant un numéro, puis lui transmet le contenu du midifile et joue la séquence.
<HTML> <HEAD> <TITLE>Marc Chemillier - Projets Licence-Maîtrise</TITLE> </HEAD> <BODY> <H2>Applet pour jouer une séquence avec MidiShare</H2> <p> Fenêtre de l'applet: 50 de hauteur, 200 de largeur <p> <APPLET CODE="Seq.class" WIDTH=200 HEIGHT=50> </APPLET> </BODY> </HTML>