insremot — Un opcode que l'on peut utiliser pour implémenter un orchestre distant. Cet opcode envoie des évènements de note d'une machine source vers une machine de destination.
Avec les opcodes insremot et insglobal, 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. Durant l'exécution, la machine maître envoie les évènements de note aux clients. L'opcode insremot envoie des évènements d'une machine source à une machine de destination. Pour envoyer des évènements à plusieurs destinations (diffusion), on utilise l'opcode insglobal. Ces deux opcodes peuvent être utilisés en combinaison.
idestination -- une chaîne représentant l'ordinateur client (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 serveur (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.
Note | |
---|---|
Il est essentiel que les ordinateurs qui utilisent cet opcode aient les mêmes ordre des octets, taille des données (double ou float) et taille de pointeur. On ne peut pas l'utiliser par exemple en mélangeant des ordinateurs 32 bit et 64 bit. |
Note | |
---|---|
Cet opcode peut utiliser en interne les fonctions gethostname et gethostbyname pour déterminer les adresses IP du client et du serveur afin de tester quels messages sont destinés à quelle machine, ou d'autres techniques sur les systèmes différents de Windows. Si un ordinateur a plus d'une adresse IP il n'y a aucun moyen de contrôler quelle adresse IP est choisie (mais voir ci-dessous). Sur les systèmes différents de Windows, l'interface réseau par défaut est eth0 ou en0, et si cela échoue wlan0. Depuis la version 6.05, on peut indiquer l'interface réseau à utiliser avec la variable d'environnement CS_ETHER. |
Note | |
---|---|
L'opération à distance ne permet pas du tout l'envoi de chaînes de caractères. |
Voici un exemple de l'opcode insremot. Il utilise les fichiers insremot.csd et insremotM.csd.
Exemple 474. Exemple de l'opcode insremot.
L'exemple ci-dessous montre l'exemple barmodel joué sur une machine distante. La machine maître et le client sont respectivement nommés "192.168.1.100" et "192.168.1.101". Démarrer le client sur sa machine (il attendra de recevoir des é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 -+rtaudio=alsa -odac -dm0 insremot.csd), tandis que la commande sur la machine maître ressemble à ceci (csound -+rtaudio=alsa -odac -dm0 insremotM.csd).
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 insremot.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> nchnls = 1 insremot "192.168.1.100", "192.168.1.101", 1 instr 1 aq barmodel 1, 1, p4, 0.001, 0.23, 5, p5, p6, p7 out aq endin </CsInstruments> <CsScore> f0 360 e </CsScore> </CsoundSynthesizer>
<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 insremotM.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> nchnls = 1 insremot "192.168.1.100", "192.168.1.101", 1 instr 1 aq barmodel 1, 1, p4, 0.001, 0.23, 5, p5, p6, p7 out aq endin </CsInstruments> <CsScore> i1 0 0.5 3 0.2 500 0.05 i1 0.5 0.5 -3 0.3 1000 0.05 i1 1.0 0.5 -3 0.4 1000 0.1 i1 1.5 4.0 -3 0.5 800 0.05 e </CsScore> </CsoundSynthesizer>