joystick — Lit les données provenant d'un joystick.
Note | |
---|---|
A noter que cet opcode n'est actuellement disponible que sous GNU/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.
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>