OSClisten — Ecoute les messages OSC sur un chemin particulier.
Opcode du greffon osc.
Cherche à chaque cycle-k si un message OSC a été envoyé à un certain chemin d'un certain type.
kans OSClisten ihandle, idest, itype [, xdata1, xdata2, ...]
kans, kdata[] OSClisten ihandle, idest, itype
ihandle -- un identifiant retourné par un appel antérieur à OSCinit, pour associer OSClisten avec un numéro de port particulier.
idest -- une chaîne de caractères représentant l'adresse de destination. Elle est formatée comme un chemin préfixé par une barre oblique, avec d'éventuels sous-répertoires séparés par des barres obliques. Csound traite les messages entrants qui correspondent à cette adresse.
itype -- une chaîne de caractères indiquant le type des arguments optionnels à lire. La chaîne peut contenir les caractères "acdfhisAG" qui signifient audio, caractère, double, flottant, entier sur 64 bit, entier sur 32 bit, chaîne de caractères, tableau scalaire et ftable. Tous les types sauf 'asA' nécessitent une variable de taux-k ; 's' nécessite une variable chaîne de caractères, 'a' une variable audio et 'A' un tableau de taux-i ou de taux-k. Pour le type 'G' on peut utiliser une variable ou une constante.
Un identifiant est inséré dans le module d'écoute (voir OSCinit) pour intercepter les messages conformes à ce modèle.
kans -- fixé à 1 si un nouveau message a été reçu, ou 0 dans le cas contraire. Si plusieurs messages sont reçus dans une seule période de contrôle, les messages sont mis dans un tampon, et OSClisten peut être rappelé jusqu'à ce que 0 soit retourné.
S'il y avait un message les variables xdata recoivent les valeurs en entrée, selon l'interpétration du paramètre itype. Noter que bien que les variables xdata soient situées à droite de l'opérateur, ce sont des sorties, et elles doivent donc être des variables de type a, ga, k, gk, S, gS, k[] ou gk[] et peut-être nécessiter une déclaration avec init ou = dans le cas des variables chaîne de caractères, avant l'appel à OSClisten.
L'exemple montre une paire de nombres en virgule flottante reçus sur le port 7770.
sr = 44100 ksmps = 100 nchnls = 2 gihandle OSCinit 7770 instr 1 kf1 init 0 kf2 init 0 nxtmsg: kk OSClisten gihandle, "/foo/bar", "ff", kf1, kf2 if (kk == 0) goto ex printk 0,kf1 printk 0,kf2 kgoto nxtmsg ex: endin
Ci-dessous deux fichiers .csd démontrent l'utilisation des opcodes OSC. Ils utilisent les fichiers OSCmidisend.csd et OSCmidircv.csd.
Exemple 692. Exemples des opcodes OSC.
Les deux fichiers .csd suivants démontrent l'utilisation des opcodes OSC dans Csound. Le premier fichier, OSCmidisend.csd, transforme des messages MIDI reçus en en données OSC. Le second fichier, OSCmidircv.csd, peut prendre ces messages OSC et les interpréter pour générer du son à partir des messages de note, et stocker les valeurs de contrôleur. Il utilise le contrôleur 7 pour modifier le volume. Noter que ces fichiers sont conçus pour se trouver sur la même machine, mais si une adresse d'hôte différente (dans la macro IPADDRESS) est utilisée, ils peuvent se trouver sur différentes machines d'un réseau, ou connectées via l'internet.
Fichier CSD pour envoyer des messages OSC :
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O </CsOptions> <CsInstruments> sr = 44100 ksmps = 128 nchnls = 1 ; Example by David Akbari 2007 ; Modified by Jonathan Murphy ; Use this file to generate OSC events for OSCmidircv.csd #define IPADDRESS # "localhost" # #define PORT # 47120 # turnon 1000 instr 1000 kst, kch, kd1, kd2 midiin OSCsend kst+kch+kd1+kd2, $IPADDRESS, $PORT, "/midi", "iiii", kst, kch, kd1, kd2 endin </CsInstruments> <CsScore> f 0 3600 ;Dummy f-table e </CsScore> </CsoundSynthesizer>
Fichier CSD pour recevoir des messages OSC :
<CsoundSynthesizer> ; network_recv.csd <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O </CsOptions> <CsInstruments> sr = 44100 ksmps = 128 nchnls = 1 ; Example by Jonathan Murphy and Andres Cabrera 2007 ; Use file OSCmidisend.csd to generate OSC events for this file 0dbfs = 1 gilisten OSCinit 47120 gisin ftgen 1, 0, 16384, 10, 1 givel ftgen 2, 0, 128, -2, 0 gicc ftgen 3, 0, 128, -7, 100, 128, 100 ;Default all controllers to 100 ;Define scale tuning giji_12 ftgen 202, 0, 32, -2, 12, 2, 256, 60, 1, 16/15, 9/8, 6/5, 5/4, 4/3, 7/5, \ 3/2, 8/5, 5/3, 9/5, 15/8, 2 #define DEST #"/midi"# ; Use controller number 7 for volume #define VOL #7# turnon 1000 instr 1000 kst init 0 kch init 0 kd1 init 0 kd2 init 0 next: kk OSClisten gilisten, $DEST, "iiii", kst, kch, kd1, kd2 if (kk == 0) goto done printks "kst = %i, kch = %i, kd1 = %i, kd2 = %i\\n", \ 0, kst, kch, kd1, kd2 if (kst == 176) then ;Store controller information in a table tablew kd2, kd1, gicc endif if (kst == 144) then ;Process noteon and noteoff messages. kkey = kd1 kvel = kd2 kcps cpstun kvel, kkey, giji_12 kamp = kvel/127 if (kvel == 0) then turnoff2 1001, 4, 1 elseif (kvel > 0) then event "i", 1001, 0, -1, kcps, kamp endif endif kgoto next ;Process all events in queue done: endin instr 1001 ;Simple instrument icps init p4 kvol table $VOL, gicc ;Read MIDI volume from controller table kvol = kvol/127 aenv linsegr 0, .003, p5, 0.03, p5 * 0.5, 0.3, 0 aosc oscil aenv, icps, gisin out aosc * kvol endin </CsInstruments> <CsScore> f 0 3600 ;Dummy f-table e </CsScore> </CsoundSynthesizer>
Plus d'information sur cet opcode : http://www.youtube.com/watch?v=JX1C3TqP_9Y, par Andrés Cabrera.