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

## joystick

joystick — Lit les données provenant d'un joystick.

## Description

Lit les données provenant d'un joystick sous Linux.

## Syntaxe

    kres joystick kdevice ktab

## Exécution

| Note
Prière de noter que pour le moment cet opcode ne fonctionne que sous Linux.

kdevice -- l'index de périphérique du joystick, soit /dev/jsN, soit /dev/input/jsN.

ktab -- Une table pour recevoir les valeurs en entrée, devant pouvoir stocker au moins une valeur par axe du joystick, une valeur pour chaque bouton, plus deux valeurs. Les deux premiers éléments de la table sont initialisés avec le nombre d'axes et le nombre de boutons, respectivement, lorsqu'un joystick est ouvert. Si un joystick est débranché durant l'exécution, l'opcode va tenter de réouvrir le périphérique de manière répétitive, avec un délai entre chaque essai.

## Exemples

Voici un exemple de l'opcode joystick. Il utilise le fichier joystick.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
    -odac      ;;;realtime audio out
    ;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
    ; For Non-realtime ouput leave only the line below:
    ; -o joystick.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    sr = 44100
    ksmps = 32
    nchnls = 2
    ;0dbfs  = 1

    instr 1 ; gives information about your joystick in real time

    kmask    joystick   0, 1
    kidx     =  2
    kaxes    tab 0, 1 ; number of axes has been stored in position 0
    kbuttons tab 1, 1 ; number of buttons has been stored in position 1
             printf "this joystick has %d axes, %d buttons\n", kidx, kaxes, kbuttons
    kuniq    init 0

    reportaxis: ; first we see if we have any x/y input
    	kcheck    =  kmask & (1<<kidx)
    	if kcheck == 0 kgoto nexta
    	kres      tab       kidx, 1
    	kuniq     =  kuniq + 1 ; to be sure to make the printf print
    		  printf    "axis %d, value %6d\n", kuniq, kidx-2, kres
    nexta:
    	kidx      =  kidx+1
    	if kidx < (kaxes+2) kgoto reportaxis

    reportbutton: ; now we check for any buttons pressed
    	kcheck    =  kmask & 1<<kidx
    	if kcheck == 0 kgoto nextb
    	kres      tab       kidx, 1 ; a button has been pressed, get from table
    		  printf    "button %d, pushed\n", kidx*kres, (kidx-(kaxes+2))
    		  printf    "button %d, released\n", kidx*(1-kres), (kidx-(kaxes+2))

    nextb:
    	kidx      =  kidx+1
    	if kidx < (kaxes+kbuttons+2) kgoto reportbutton

    endin
    </CsInstruments>
    <CsScore>

    f1  0 32    7     0     7     0         ; will hold the joystick data

    i1  0  60000

    e
    </CsScore>
    </CsoundSynthesizer>

Voici un autre exemple de l'opcode joystick. Il utilise le fichier joystick-2.csd.

    <CsoundSynthesizer>
    <CsOptions>
    ; Select audio/midi flags here according to platform
    -odac    ;;;realtime audio out
    ;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
    ; For Non-realtime ouput leave only the line below:
    ; -o joystick-2.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    sr = 44100
    ksmps = 32
    nchnls = 2
    ;0dbfs  = 1

    instr 1

    kmask   joystick   0, 1
    kaxes    init 0
    kbuttons init 0
    kx0      init 0 ; first two entries are # of axes and # of buttons,
    ky0      init 0 ; then axes, then buttons
             vtabk 0, 1, kaxes, kbuttons, kx0, ky0
    kidx     =  2+kaxes

    buttons:
      kcheck =  kmask & 1<<kidx   ; if the button was just now pressed and...
      kres   tab       kidx, 1    ; if button value is one, start a note
             schedkwhen  kres*kcheck, 1, 20, 2, 0, 60000, kidx, kx0, ky0
      kidx   =  kidx+1
    if kidx < (kaxes+kbuttons+2) kgoto buttons

    endin

    instr 2 ; play a tone until the button is released

    kstop   tab  p4, 1 ; when this button is released, we fade out
    ihz     init cpsoct(((p5+32767)/9362)+5) ; ~ 30 hz to 4khz
    print ihz
    ito     init ampdb(((p6+32767)/2184)+60) ; ~ 60 - 90 db
    kenv    init 0
    kdelta  init ito/(kr*10)
    if kstop == 1 kgoto output
    if kdelta < 0 kgoto output
    kdelta    =  kdelta*-1

    output:
      kenv =  kenv+kdelta
      kenv limit kenv, 0, ito
      aout oscils 1, ihz, 0
      aout =  kenv*aout
           outs aout, aout
    if kenv != 0 kgoto noexit
    if kdelta > 0 kgoto noexit
    turnoff
    noexit:

    endin
    </CsInstruments>
    <CsScore>
    f1  0 32    7     0     7     0         ; will hold the joystick data

    i1  0  60000

    e
    </CsScore>
    </CsoundSynthesizer>

## Crédits

Auteur : Justin Glenn Smith
2010

Nouveau dans la version 5.17.12

Précédent | Niveau supérieur | Suivant
jitter2 | Sommaire | jspline