Allumer les touches du widget keyboard

Bonsoir,

J’ai regardé la doc mais j’avoue je ne sais pas par où aller…
https://openstagecontrol.ammd.net/docs/widgets-reference/#keyboard

Je cherche à allumer les touches du piano les notes étant envoyées à o s c. Comment lier la valeur midi avec la bonne touche ? Sur quelle propriété agir pour allumer la touche dont la note est jouée ?

un petit exemple sous la main parce que là je ne vois pas par où commencer.
Merci pour une éventuelle piste.

Il faut envoyer à O-S-C le même message que celui envoyé par la touche en question (velocité identique), comme pour les boutons push. Cependant, si la source du message est identifiée comme étant une cible du widget en question (target), le comportement est différent: le bouton n’est pas allumé mais apparait comme appuyé.

Edit: si la valeur envoyée par o-s-c est corrigée au moment de la conversion en MIDI ça risque de ne pas marcher puisque à l’inverse, à la reception, la valeur ne correspondra pas à celle attendue par le widget.

Merci pour ta réponse.
Lorsqu’on appuie sur une touche du clavier depuis o-s-c

OSC sent: { address: '/keyboard_1',
args: [ { type: 'f', value: 59 }, { type: 'f', value: 0 } ] } To: 127.0.0.1:4559

Donc j’envoie depuis Sonic Pi

n = 48
print n

osc "/keyboard_1", n, 1
sleep 0.5
osc "/keyboard_1", n, 0
sleep 0.5

et le log d’o-s-c me donne

OSC received: { address: '/keyboard_1', args: [ 48, 1 ] } From: 127.0.0.1:4560
OSC received: { address: '/keyboard_1', args: [ 48, 0 ] } From: 127.0.0.1:4560

et ça marche :slight_smile:

Bon pour tout remettre à zéro il faut passer note allumée après note allumée… quelle syntaxe pour récupérer la valeur de début du clavier et son étendue pour calculer toutes les valeurs midi à mettre à 0.

Dernière question : comment gérer la couleur des touches. Par exemple, je veux allumer toutes les notes faisant partie d’une gamme, touches vertes et jouer les notes comprises dans cette gamme les une après les autres, la touche active étant par exemple en orange.

Encore merci

quelle syntaxe pour récupérer la valeur de début du clavier et son étendue

En utilisant @{keyboard_1.start} et @{keyboard_1.keys} dans une formule (#{} ou JS{{}}).

https://openstagecontrol.ammd.net/docs/advanced-property-syntax/

gérer la couleur des touches

Avec du css

.on {
background:green;
}
.active {
background:orange;
}

merci pour le rappel sur les variables.
Pour le css concernant les touches, ce n’est pas ce que je recherche, je me suis mal exprimé : comment allumer les touches représentant les notes contenues dans une gamme dans un état “neutre” non jouées mais différenciées par une couleur, jaune par exemple, des touches non présentes dans la gamme qui elles sont dans un état off. Ensuite o-s-c reçoit les notes jouées et là ok c’est la classe css on qui entre en jeu.
Ou plus simplement comment lier une classe css à une touche précise ? Est-ce possible ?
Merci pour une éventuelle réponse.

On ne peut pas ajouter de classe css à une touche mais on peut cibler n’importe qelle touche individuellement grâce au selecteur css :nth-child

.widget:nth-child(1),
.widget:nth-child(2) {
  background: red
}

Change la couleur des deux premières touches.

1 Like

Bonjour,

En fait, ce serait bien si il pouvait y avoir un état supplémentaire pour les touches du clavier à savoir un état “disponible” ou “réactive” pour coloriser les touches sur lesquelles on peut appuyer et qui réagissent. Le terme est à définir.
Par exemple, sur un clavier indiquer uniquement les touches contenues dans une gamme particulière.
donc une classe css

  • pour la couleur des touches affichées du clavier
  • pour la couleur de la touche lorsqu’elle est appuyée
  • pour la couleur de la touche lorsqu’elle est libre
  • pour la couleur de la touche lorsqu’elle est “disponible” “réactive”

Qu’en penses-tu ?

Cela peut aussi être fait avec la methode décrite plus haut sans ajouter de classe, si tu veux rendre une touche non réactive il te suffit d’y appliquer la règle css pointer-events: none;.

donc je comprends que tu n’es pas partant pour ajouter un état touche “morte” à une touche du clavier ?

En effet, je ne pense pas qu’il faille ajouter une option pour cela.