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] 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