midremot — Un opcode que l'on peut utiliser pour implémenter un orchestre midi distant. Cet opcode envoie des évènements midi d'une machine source vers une machine de destination.
Avec les opcodes midremot et midglobal il est possible d'exécuter des instruments sur des machines distantes et de les contrôler depuis une machine maître. Les opcodes distants sont implémentés suivant le modèle maître/client. Toutes les machines concernées contiennent le même orchestre mais seule la machine maître possède l'information de la partition midi. Durant l'exécution, la machine maître envoie les évènements midi aux clients. L'opcode midremot envoie des évènements d'une machine source à une machine de destination. Pour envoyer des évènements à plusieurs destinations (diffusion), on utilise l'opcode midglobal. Ces deux opcodes peuvent être utilisés en combinaison.
idestination -- une chaîne représentant l'ordinateur de destination (par exemple 192.168.0.100). C'est l'hôte de destination qui reçoit les évènements de l'instrument donné.
isource -- une chaîne représentant l'ordinateur hôte (par exemple 192.168.0.100). C'est l'hôte source qui génère les évènements pour l'instruments donné et les envoie à l'adresse donnée par idestination.
instrnum -- liste des numéros des intruments qui seront joués sur la machines destinataire.
Voici un exemple de l'opcode midremot. Il utilise le fichier insremot.csd.
Exemple 613. Exemple de l'opcode midremot.
L'exemple montre une fugue de Bach jouée sur 4 ordinateurs distants. La machine maître est nommée "192.168.1.100", le client1 "192.168.1.101" et ainsi de suite. Démarrer le client sur chaque machine (ils attendront de recevoir les évènements de la machine maître), puis démarrer le maître. Sur un système linux, on démarre un client avec la commande (csound -dm0 -odac -+rtaudio=alsa midremot.csd -+rtmidi=Null), tandis que la commande sur la machine maître ressemble à ceci (csound -dm0 -odac -+rtaudio=alsa midremot.csd -F midremot.mid).
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o midremot.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 kr = 441 ksmps = 100 nchnls = 2 massign 1,1 massign 2,2 massign 3,3 massign 4,4 massign 5,5 ga1 init 0 ga2 init 0 gi1 sfload "19Trumpet.sf2" gi2 sfload "01hpschd.sf2" gi3 sfload "07AcousticGuitar.sf2" gi4 sfload "22Bassoon.sf2" gitab ftgen 1,0,1024,10,1 midremot "192.168.1.100", "192.168.1.101", 1 midremot "192.168.1.100", "192.168.1.102", 2 midremot "192.168.1.100", "192.168.1.103", 3 midglobal "192.168.1.100", 5 instr 1 sfpassign 0, gi1 ifreq cpsmidi iamp ampmidi 10 inum notnum ivel veloc kamp linsegr 1,1,1,.1,0 kfreq init 1 a1,a2 sfplay ivel,inum,kamp*iamp,kfreq,0,0 outs a1,a2 vincr ga1, a1*.5 vincr ga2, a2*.5 endin instr 2 sfpassign 0, gi2 ifreq cpsmidi iamp ampmidi 15 inum notnum ivel veloc kamp linsegr 1,1,1,.1,0 kfreq init 1 a1,a2 sfplay ivel,inum,kamp*iamp,kfreq,0,0 outs a1,a2 vincr ga1, a1*.4 vincr ga2, a2*.4 endin instr 3 sfpassign 0, gi3 ifreq cpsmidi iamp ampmidi 10 inum notnum ivel veloc kamp linsegr 1,1,1,.1,0 kfreq init 1 a1,a2 sfplay ivel,inum,kamp*iamp,kfreq,0,0 outs a1,a2 vincr ga1, a1*.5 vincr ga2, a2*.5 endin instr 4 sfpassign 0, gi4 ifreq cpsmidi iamp ampmidi 15 inum notnum ivel veloc kamp linsegr 1,1,1,.1,0 kfreq init 1 a1,a2 sfplay ivel,inum,kamp*iamp,kfreq,0,0 outs a1,a2 vincr ga1, a1*.5 vincr ga2, a2*.5 endin instr 5 kamp midic7 1,0,1 denorm ga1 denorm ga2 aL, aR reverbsc ga1, ga2, .9, 16000, sr, 0.5 outs aL, aR ga1 = 0 ga2 = 0 endin </CsInstruments> <CsScore> ; Score f0 160 </CsScore> </CsoundSynthesizer>