OSClisten
Précédent | Opcodes et opérateurs de l'orchestre | Suivant

## OSClisten

OSClisten — Ecoute les messages OSC sur un chemin particulier.

## Description

Opcode du greffon osc.

Cherche à chaque cycle-k si un message OSC a été envoyé à un certain chemin d'un certain type.

## Syntaxe

    kans OSClisten ihandle, idest, itype [, xdata1, xdata2, ...]

    kans, kdata[] OSClisten ihandle, idest, itype

## Initialisation

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.

## Exécution

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.

## Exemples

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 681. 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>

## Voir aussi

OSCsend, OSCinit

Plus d'information sur cet opcode : http://www.youtube.com/watch?v=JX1C3TqP_9Y, par Andrés Cabrera.

## Crédits

Auteur : John ffitch
2005
Exemples par David Akbari, Andrés Cabrera et Jonathan Murphy 2007

Les types aAG sont nouveaux dans in Csound 6.07

Précédent | Niveau supérieur | Suivant
OSCinitM | Sommaire | OSCraw