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

## 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
Cet opcode peut également s'écrire sense.

## Exemples

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

Exemple 825. 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 826. 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 827. 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.

Précédent | Niveau supérieur | Suivant
sense | Sommaire | serialBegin