sensekey

sensekey — Retourne le code ASCII d'une touche enfoncée.

Description

Retourne le code ASCII d'une touche enfoncée ou -1 si aucune touche n'a été enfoncée.

Syntaxe

kres[, kkeydown] sensekey

Exécution

kres - retourne la valeur ASCII d'une touche qui a été enfoncée ou relachée.

kkeydown - retourne 1 si la touche a été enfoncée, 0 si elle a été relachée ou s'il n'y a pas d'évènement de touche.

On peut utiliser kres pour lire les évènements clavier de stdin. Il retourne la valeur ASCII de toute touche qui a été enfoncée ou relachée, ou -1 s'il n'y a eu aucune activité clavier. La valeur de kkeydown est 1 si une touche a été enfoncée, 0 sinon. Ce comportement est suivi par défaut, si bien qu'un relachement de touche est généré immédiatement après chaque pression de touche. Pour une fonctionnalité complète, on peut utiliser FLTK pour capturer les évènements clavier. FLpanel peut être utilisé pour capturer les évènements clavier et les envoyer à l'opcode sensekey en ajoutant un argument supplémentaire facultatif. Voir FLpanel pour plus d'information.

[Note] Note

Cet opcode peut également s'écrire sense.

Exemples

Voici un exemple de l'opcode sensekey. Il utilise le fichier sensekey.csd.

Exemple 769. Exemple de l'opcode sensekey.

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
; Audio out   Audio in
-odac           -iadc    ;;;RT audio I/O
; For Non-realtime ouput leave only the line below:
; -o sensekey.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

; Initialize the global variables.
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1

; Instrument #1.
instr 1
  k1 sensekey
  printk2 k1
endin


</CsInstruments>
<CsScore>

; Play Instrument #1 for thirty seconds.
i 1 0 30
e


</CsScore>
</CsoundSynthesizer>


Voici à quoi devrait ressembler la sortie si la touche "q" est enfoncée...

q i1   113.00000

Voici un exemple de l'opcode sensekey en conjonction avec FLpanel. Il utilise le fichier FLpanel-sensekey.csd.

Exemple 770. Exemple de l'opcode sensekey utilisant la capture clavier depuis un FLpanel.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
; Audio out   Audio in    No messages
-odac           -iadc     -d     ;;;RT audio I/O
; For Non-realtime ouput leave only the line below:
; -o FLpanel-sensekey.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>
; Example by Johnathan Murphy

  sr	    =  44100
  ksmps	    =  128
  nchnls    =  2


	; ikbdcapture flag set to 1
  ikey	    init      1 		
 
	    FLpanel   "sensekey", 740, 340, 100, 250, 2, ikey
  gkasc, giasc	FLbutBank	2, 16, 8, 700, 300, 20, 20, -1
	    FLpanelEnd
	    FLrun

    instr 1

  kkey	    sensekey
  kprint    changed   kkey
	    FLsetVal  kprint, kkey, giasc

    endin

</CsInstruments>
<CsScore>
i1 0 60
e
</CsScore>
</CsoundSynthesizer>


Le bouton allumé dans la fenêtre FLpanel montre la dernière touche enfoncée.

Voici une exemple plus complexe de l'opcode sensekey en conjonction avec FLpanel. Il utilise le fichier FLpanel-sensekey2.csd.

Exemple 771. Exemple de l'opcode sensekey utilisant la capture clavier depuis un FLpanel.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
; Audio out   Audio in    No messages
-odac         ; -iadc     -d     ;;;RT audio I/O
; For Non-realtime ouput leave only the line below:
; -o FLpanel-sensekey2.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>
sr =  48000
ksmps =  32
nchnls =  1
; Example by Istvan Varga
; if the FLTK opcodes are commented out, sensekey will read keyboard
; events from stdin
        FLpanel "", 150, 50, 100, 100, 0, 1
        FLlabel 18, 10, 1, 0, 0, 0
        FLgroup "Keyboard Input", 150, 50, 0, 0, 0
        FLgroupEnd
        FLpanelEnd

        FLrun

        instr 1

ktrig1 init 1
ktrig2 init 1
nxtKey1:
k1, k2 sensekey
        if (k1 != -1 || k2 != 0) then
        printf "Key code = %02X, state = %d\n", ktrig1, k1, k2
ktrig1 =  3 - ktrig1
        kgoto nxtKey1
        endif
nxtKey2:
k3 sensekey
        if (k3 != -1) then
        printf "Character = '%c'\n", ktrig2, k3
ktrig2 =  3 - ktrig2
        kgoto nxtKey2
        endif

        endin

</CsInstruments>
<CsScore>
i 1 0 3600
e
</CsScore>
</CsoundSynthesizer>


La sortie console ressemblera à ceci :


new alloc for instr 1:
Key code = 65, state = 1
Character = 'e'
Key code = 65, state = 0
Key code = 72, state = 1
Character = 'r'
Key code = 72, state = 0
Key code = 61, state = 1
Character = 'a'
Key code = 61, state = 0

Voir aussi

FLpanel, FLkeyIn

Crédits

Auteur : John ffitch
Université de Bath, Codemist. Ltd.
Bath, UK
Octobre 2000

Exemples écrits par Kevin Conder, Johnathan Murphy et Istvan Varga.

Nouveau dans la version 4.09 de Csound. Renommé dans la version 4.10 de Csound.