midremot

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.

Description

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.

Syntaxe

midremot idestination, isource, instrnum [,instrnum...] 

Initialisation

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.

Exemples

Voici un exemple de l'opcode midremot. Il utilise le fichier insremot.csd.

Exemple 530. 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>


Voir aussi

insglobal, insremot, midglobal, remoteport

Crédits

Auteur : Simon Schampijer
2006

Nouveau dans la version 5.03