Clavier midi, comment ça marche?

Clonages d'ancètres, conceptions originales, circuit bending, le coin des grenouilles bricoleuses.

Modérateur : darcmorcel

Avatar de l’utilisateur
pfeuh
Messages : 816
Inscription : 12 févr. 2019, 07:05
Localisation : Choucroute et bière
Contact :

Clavier midi, comment ça marche?

Message par pfeuh »

Hello,

J'aimerais construire un clavier midi à base d'arduino et de récupération d'un synthé ou arrangeur Yamaha ou Casio que l'on trouve à 20 euros sur le bon coin. Je n'ai rien trouvé sur le net à part quelques expériences monophoniques.

Ce que je cherche en particulier, c'est le fonctionnement d'un clavier midi polyphonique, je pense qu'ils sont tous identiques dans le principe. J'ai cru comprendre qu'il y a deux bus, un pour le début d'appui et l'autre pour la fin d'appui, la vélocité étant calculée en fonction du temps mis de l'un à l'autre. Il y a encore apparement plein d'autre choses, donc les deux after touch qui ne sont pas en tout ou rien, bref... En fait un seul bus me suffirait, je ne désire pas gérer la vélocité.Sur comment est connecté le clavier lui même, j'ai une vague idée de lignes/colonnes, mais sans plus.

Si quelqu'un à une doc ou un lien, ça fera ma journée, merci d'avance,

A+

Pfeuh
Les gros m'aiment bien car je suis gros, les cons m'aiment bien car je suis con, mais les gros cons ne m'aiment pas car ce sont des gros cons.
Avatar de l’utilisateur
ear
Messages : 1384
Inscription : 02 avr. 2011, 19:54
Localisation : Paris
Contact :

Re: Clavier midi, comment ça marche?

Message par ear »

En googlant "arduino matrix keyboard midi", on trouve :
https://forum.arduino.cc/index.php?topic=453990.0
Les claviers modernes sont à matrices de diodes et doubles contacts pour calculer la vitesse d'enfoncement des touches pour définir la vélocité.
Cela permet de multiplexer toutes les touches avec peu de fillasse.
Il faut donc scanner pour déterminer la position de chaque touche, la mémoriser pour comparer le changement.
Ensuite il faut gérer les évènements pour encapsuler en MIDI les messages.
Rien d'ultra compliqué, mais c'est chiant à faire...
En groupe:
http://soundcloud.com/sugarglider-music" onclick="window.open(this.href);return false;
Mon bloc note:
https://soundcloud.com/loongarden" onclick="window.open(this.href);return false;
Avatar de l’utilisateur
pfeuh
Messages : 816
Inscription : 12 févr. 2019, 07:05
Localisation : Choucroute et bière
Contact :

Re: Clavier midi, comment ça marche?

Message par pfeuh »

Hello,

Merci, c'est à peu près comme je le voyais. Prochaine étape, démonter le casio que j'ai prévu à cet usage depuis quelques mois et décoder la matrice. J'espère que les diodes sont sur le clavier et non pas sur la carte! :biggrin:

A+

Pfeuh
Les gros m'aiment bien car je suis gros, les cons m'aiment bien car je suis con, mais les gros cons ne m'aiment pas car ce sont des gros cons.
Avatar de l’utilisateur
ACX
Messages : 2016
Inscription : 12 nov. 2009, 20:25
Localisation : Montmorency
Contact :

Re: Clavier midi, comment ça marche?

Message par ACX »

Si ça t'intéresse, j'ai des schémas simples de claviers. Le premier sans µC est simple à réaliser, c'est un schéma paru dans Radio Plans il y a une quarantaine d'années. Je l'ai réalisé et il fonctionne très bien. IL est monophonique.
Le deuxième est un clavier capacitif comme celui de l'AKS d'EMS. Il se compose juste d'un PCB avec un PIC et c'est tout et il est polyphonique.
Mon site SDIY http://www.acxsynth.com" onclick="window.open(this.href);return false;
Avatar de l’utilisateur
pfeuh
Messages : 816
Inscription : 12 févr. 2019, 07:05
Localisation : Choucroute et bière
Contact :

Re: Clavier midi, comment ça marche?

Message par pfeuh »

Hello ACX,

Le premier (le monophonique) m'intéresse pour voir comment c'est fait. Le deuxième non, je cherche juste à redonner une seconde vie a de vieux claviers. En particulier pour un wave trigger que j'ai acheté aussi, je voudrais réaliser le clone de mellotron le moins cher possible. Pas par avarice, juste parce que j'ai un bon clone assez cher, le Memotron MK2, et je voudrais ensuite comparer les deux pour le fun. En tout cas merci de ton offre.

A+

Pfeuh
Les gros m'aiment bien car je suis gros, les cons m'aiment bien car je suis con, mais les gros cons ne m'aiment pas car ce sont des gros cons.
Portamento
Messages : 306
Inscription : 01 nov. 2012, 12:17
Localisation : Pau
Contact :

Re: Clavier midi, comment ça marche?

Message par Portamento »

Salut,

J'ai eut l'opportunité il y a quelque temps de récupérer un clavier nu avec double contacts et aftertouch.
Mon idée a été d'en faire un clavier MIDI pour remplacer mon Roland en y apportant des fonctions supplémentaires (split, layers, pitch, molettes, etc.)
Oui, comme dit plus haut, une touche double contact est comme cela :
Image
MK=make et BR=Break. Il suffit d'envoyer une tension d'un coté et si ça passe alors la touche est enfoncée. Il existe un décalage physique entre les deux contacts. Le temps mis pour fermer le deuxième contact alors que le premier est lui aussi fermé, permet de calculer la vélocité.
Les notes sont mises sur des bus de huit notes. Mon clavier étant un 5 octaves, je me suis fait un scanner de 64 notes.
Le résultat est forcement polyphonique.
La je suis en cours de finition de mon projet, et si tu es un peu patient, je devrai bientôt mettre à disposition mes schémas, pcb et logiciel qui sont nécessaires. Quelques semaine au pire.
http://www.oZoe.fr" onclick="window.open(this.href);return false;
Avatar de l’utilisateur
pfeuh
Messages : 816
Inscription : 12 févr. 2019, 07:05
Localisation : Choucroute et bière
Contact :

Re: Clavier midi, comment ça marche?

Message par pfeuh »

Hello,

Super, merci! Je sais être patient quand ça s'impose, et là, c'est le cas. ;)

A+

Pfeuh
Les gros m'aiment bien car je suis gros, les cons m'aiment bien car je suis con, mais les gros cons ne m'aiment pas car ce sont des gros cons.
Portamento
Messages : 306
Inscription : 01 nov. 2012, 12:17
Localisation : Pau
Contact :

Re: Clavier midi, comment ça marche?

Message par Portamento »

re-bonjour,
pfeuh a écrit :J'aimerais construire un clavier midi à base d'arduino et de récupération d'un synthé ou arrangeur Yamaha ou Casio que l'on trouve à 20 euros sur le bon coin. Je n'ai rien trouvé sur le net à part quelques expériences monophoniques.

Ce que je cherche en particulier, c'est le fonctionnement d'un clavier midi polyphonique, je pense qu'ils sont tous identiques dans le principe. J'ai cru comprendre qu'il y a deux bus, un pour le début d'appui et l'autre pour la fin d'appui, la vélocité étant calculée en fonction du temps mis de l'un à l'autre. Il y a encore apparement plein d'autre choses, donc les deux after touch qui ne sont pas en tout ou rien, bref... En fait un seul bus me suffirait, je ne désire pas gérer la vélocité.Sur comment est connecté le clavier lui même, j'ai une vague idée de lignes/colonnes, mais sans plus.
Tu as tout à fait raison. Si ton clavier à deux contacts par touche alors il peut gérer la vélocité.
A titre d’exemple, je t’ai fait deux schémas simplifiés (mais complet) d’un clavier genre ‘pédalier de basse’ avec et sans vélocité.
ici : sans velocité et avec velocité

Les colonnes ‘Make’ et ‘Break’ regroupent des blocs de 8 touches maxi, et ce tant que tu as des touches. Un clavier 5 octaves de 61 touches ira de MK0 à MK7. Dans mon schéma exemple 1 octave va de MK0 à MK1. Il y a toujours 8 lignes ‘RAW’. Ces lignes regroupent le point commun de la première, puis de la seconde, etc. jusqu'à la huitième touche de chaque bloc de colonne. (C’est plus simple sur le schéma ;-).

Si tu fais de la récupération, le plus dur sera de repérer correctement tous les points de contacts.

Ensuite, ‘il suffit’ de faire un scan de toutes les colonnes, ligne par ligne en regardant si le courant passe (=contact), puis de refaire la même chose pour le break.
Ainsi tu disposes de 4 informations par touches. On Make, On Break, off Make, off Break.
Vélocité=temps de ‘on break’- temps de ‘on Make’ en millisecondes, Note_ON = ON Break, Note OFF=off Make.
A noter que l’on pourrai aussi calculer une vélocité pour le relâchement de la touche clavier. Je ne suis pas sur que cela ai beaucoup de sens musical.

Pour l'aftertouch, Il existe deux types d’aftertouch : un commun à toutes les touches (le plus courant) et un par touche. Je n’ai rencontrer que le commun à toutes les touches. Il s’agit en fait d’une résistance variable avec la pression. Il faut donc la raccorder à une entrée ADC d’un microcontroleur pour transformer la grandeur électrique en data midi.

Je te mets iciun logiciel simple avec velocite que j'ai fait sur un teensy qui te permet d'avoir un clavier polyphonique en sortie MIDI DIN et/ou MIDI USB. Il est très facilement adaptable à un arduino (sans le midi usb).
Le shéma associé est ici.
Également, je vais bientôt mettre mon site à jour avec un clavier midi ayant des zones de split, des layers et molette, pitch, aftertouch, etc.
http://www.oZoe.fr" onclick="window.open(this.href);return false;
Avatar de l’utilisateur
patroche
Messages : 4335
Inscription : 14 févr. 2010, 07:03

Re: Clavier midi, comment ça marche?

Message par patroche »

Également, je vais bientôt mettre mon site à jour avec un clavier midi ayant des zones de split, des layers et molette, pitch, aftertouch, etc.
Et le portamento aussi ? :fou:
Portamento
Messages : 306
Inscription : 01 nov. 2012, 12:17
Localisation : Pau
Contact :

Re: Clavier midi, comment ça marche?

Message par Portamento »

patroche a écrit :Et le portamento aussi ?
:palm: :palm: :palm: :bravo:
http://www.oZoe.fr" onclick="window.open(this.href);return false;
Avatar de l’utilisateur
pfeuh
Messages : 816
Inscription : 12 févr. 2019, 07:05
Localisation : Choucroute et bière
Contact :

Re: Clavier midi, comment ça marche?

Message par pfeuh »

Hello,

Merci beaucoup pour toutes ces infos, le hard, le soft, la totale, j'ai de quoi faire. Je vais me contenter d'un clavier sans vélocité et sans aftertouch.
Portamento a écrit :Si tu fais de la récupération, le plus dur sera de repérer correctement tous les points de contacts.
Le repérage ne va pas être trop dur je pense.

Je vais par contre devoir changer mes habitudes car les Arduino Nano et Uno que j'utilise généralement (j'en ai eu un petit stock à pas cher) n'ont pas assez de gpio pour autant de lignes et de colonnes. Jusquà 12, ça va, mais au dessus il faut ruser, d'autant qu'il me faudra lire 2 rotacteurs 1x 4 pour sélectionner les sons. Comme c'est pour un wave trigger, je voudrais changer à la volée le canal midi en fonction des rotacteurs, car c'est comme ça que marche le wave trigger au niveau du choix des sons si j'ai bien compris.

A part les 2 précités, j'ai aussi bossé avec la Arduino Mega, mais là c'est trop, 4 uart, une 50aine de gpio... Je vais regarder si dans la gamme arduino il n'y a pas quelque chose entre les deux.

A+

Pfeuh
Les gros m'aiment bien car je suis gros, les cons m'aiment bien car je suis con, mais les gros cons ne m'aiment pas car ce sont des gros cons.
Avatar de l’utilisateur
Salmacis
Messages : 588
Inscription : 25 janv. 2012, 13:30

Re: Clavier midi, comment ça marche?

Message par Salmacis »

Regarde peut être du coté des STM32 qui fonctionne sur l'IDE Arduino.
Tu aura quelque chose de plus puissant et je crois avec plus de GPIO

Pour les GPIO avec un extendeur I2C genre MCP23017 ca devrait le faire....

Effectivement tu peux commander directement les sons par la sélection du canal midi (avec un encoder donc 2 GPIO,peut être voir avec une entrée analogique donc 1 GPIO)
Le mieux c'est d'utiliser la bibliothèque fournie chez sparkfun https://github.com/robertsonics/WAV-Tri ... al-Library...c'est un peu plus compliqué mais nettement plus flexible.

Apres pourquoi se retaper tous le décodage du clavier si tu peux trouver un petit clavier midi a intégrer directement ? Du coup il te manquerais uniquement l'optocouplage pour l'entrée midi et c'est tout.
Portamento
Messages : 306
Inscription : 01 nov. 2012, 12:17
Localisation : Pau
Contact :

Re: Clavier midi, comment ça marche?

Message par Portamento »

Salmacis a écrit :Apres pourquoi se retaper tous le décodage du clavier si tu peux trouver un petit clavier midi a intégrer directement ? Du coup il te manquerais uniquement l'optocouplage pour l'entrée midi et c'est tout.
J'ai aussi l'animation d'un WaveTrigger dans mes projets à moyen/long terme. C'est comme cela que j'envisage la chose.
http://www.oZoe.fr" onclick="window.open(this.href);return false;
Avatar de l’utilisateur
pfeuh
Messages : 816
Inscription : 12 févr. 2019, 07:05
Localisation : Choucroute et bière
Contact :

Re: Clavier midi, comment ça marche?

Message par pfeuh »

Salmacis a écrit :Effectivement tu peux commander directement les sons par la sélection du canal midi (avec un encoder donc 2 GPIO,peut être voir avec une entrée analogique donc 1 GPIO)
Les encodeurs qui incrémentent ou dérémentent le numéro du son nécessitent un affichage, le rotacteur est visuel, pas besoin d'affichage, à l'ancienne. J'aurai carément préféré un radiobouton comme sur les spinet Hammond ou les vieux autoradio, mais ne rêvons pas. Les entrées analogiques ont besoin d'une milliseconde pour la conversion, j'évite autant que possible.
Salmacis a écrit :Apres pourquoi se retaper tous le décodage du clavier si tu peux trouver un petit clavier midi a intégrer directement ? Du coup il te manquerais uniquement l'optocouplage pour l'entrée midi et c'est tout.
C'est juste pour m'occuper, le plaisir du DIY quoi, je suis codeur à la retraite et le chronophage ne me rebute pas. Tant que c'est que du soft et que mes deux mains gauches ne sont pas concernées... :vieux:
Salmacis a écrit :avec un encoder donc 2 GPIO
Touts mes essais se sont soldés par des échecs. Je n'avais que des encodeurs chinois. J'ai même exceptionnellement essayé de rajouter des capas entre les 2 gpio et le 0V, rien à faire, des rebonds comme je n'en avais jamais vu.
Salmacis a écrit :la bibliothèque fournie chez sparkfun https://github.com/robertsonics/WAV-Tri ... al-Library...c'est un peu plus compliqué mais nettement plus flexible.
Ah, ben voilà du chronophage! :bravo:
Les gros m'aiment bien car je suis gros, les cons m'aiment bien car je suis con, mais les gros cons ne m'aiment pas car ce sont des gros cons.
Avatar de l’utilisateur
ACX
Messages : 2016
Inscription : 12 nov. 2009, 20:25
Localisation : Montmorency
Contact :

Re: Clavier midi, comment ça marche?

Message par ACX »

Touts mes essais se sont soldés par des échecs. Je n'avais que des encodeurs chinois. J'ai même exceptionnellement essayé de rajouter des capas entre les 2 gpio et le 0V, rien à faire, des rebonds comme je n'en avais jamais vu.
Revois ton code. Même avec des encodeurs pourris ça doit marcher, surtout si tu as mis des petites capas de 100nF avec la petite résistance de 10k qui va bien.
Tu n'as pas besoin de beaucoup de GPIO si tu utilises des multiplexeurs. Prend des analogiques commes les 74HC4067 qui sont plus rapides.
Mon site SDIY http://www.acxsynth.com" onclick="window.open(this.href);return false;
Avatar de l’utilisateur
pfeuh
Messages : 816
Inscription : 12 févr. 2019, 07:05
Localisation : Choucroute et bière
Contact :

Re: Clavier midi, comment ça marche?

Message par pfeuh »

ACX a écrit :Revois ton code. Même avec des encodeurs pourris ça doit marcher, surtout si tu as mis des petites capas de 100nF avec la petite résistance de 10k qui va bien.
Pour le code, j'ai appliqué le principe de base, une interruption sur front descendant d'une des 2 voies et on regarde l'état de l'autre pour savoir si on monte ou si on descend. Euh... Fallait mettre une résistance aussi? :mdr: Pour l'anti rebond résistance-capa, je vais demander à google plutôt que te faire perdre ton temps. J'ai trouvé celui-là, c'est bon?

Image
ACX a écrit :Tu n'as pas besoin de beaucoup de GPIO si tu utilises des multiplexeurs. Prend des analogiques commes les 74HC4067 qui sont plus rapides.
C'est hors de ma portée. Sur une plaque d'essai à la limite, mais il faudra le faire en vrai plus tard avec de la soudure, j'en suis incapable.
Les gros m'aiment bien car je suis gros, les cons m'aiment bien car je suis con, mais les gros cons ne m'aiment pas car ce sont des gros cons.
Avatar de l’utilisateur
ACX
Messages : 2016
Inscription : 12 nov. 2009, 20:25
Localisation : Montmorency
Contact :

Re: Clavier midi, comment ça marche?

Message par ACX »

Oui, c'est le schéma standard de l'anti rebond. Il existe aussi un schéma d'anti rebond "absolu" réalisé avec deux portes Nand, mais ça devient compliqué à réaliser.

Pour le code le principe est bon, tu peux partir sur une interruption ou tout bêtement scruter les ports régulièrement à l'aide d'un Timer. C'est cette dernière méthode que j'utilise, car en modifiant la vitesse du Timer, donc la vitesse de scrutation, tu élimines déjà pas mal de rebonds. Ensuite, tu mets des flags pour t'assurer que tu ne prends pas en compte plusieurs fois le même contact. Le luxe enfin, c'est de mesurer le temps entre les contacts pour en déduire la vitesse de rotation et modifier alors les incréments en conséquence. Plus on tourne vite l'encodeur et plus l'incrémentation augmente. Cet incrément dynamique rend les encodeurs bien plus agréables à utiliser.
Mon site SDIY http://www.acxsynth.com" onclick="window.open(this.href);return false;
Avatar de l’utilisateur
pfeuh
Messages : 816
Inscription : 12 févr. 2019, 07:05
Localisation : Choucroute et bière
Contact :

Ca y est, je sais!

Message par pfeuh »

Hello,

Les images qui vont suivre sont extraites de Massacre à la scie sauteuse, donc si vous être sensible, ne regardez pas. :mdr:

J'ai cannibalisé un Farfisa TK 615 acheté à 20 euros sur le bon coin. Après avoir mis les 2 HP et la (mono)carte à la poubelle, j'ai connecté les 16 fils de la nappe sur un gros arduino pour profiter du bloc de 16 gpio en single-in-line sur un connecteur facilement accessible. 12345 insultes à l'encontre de mon fer à souder et 23456 coups de cutter pour éliminer les courts-circuits sur les pâtés de soudure plus tard, je ne suis lancé dans le soft.

La partie soft a été beaucoup plus facile. Ça a répondu du premier coup. Une deuxième compilation pour retourner les bits dans le bon ordre et inverser deux blocs de 8 et c'était parfait (c'est souvent le cas, les gars du hardware routent n'importe comment en pensant y z'auront qu'à corriger ça au software.). Il ne me reste plus qu'à:

-Trouver un clavier vintage plus joli et plus facilement modifiable.
- penser une IHM sympathique pour changer de son, transpposer etc....
- Trouver un fablab qui m'aidera.
- faire une banque de samples décente pour le wave trigger.

Ça me reviendra sûrement moins cher que mon Memotron MkI, mais c'est la course à l'échalotte! Du coup, un Memotron, ça se revend bien.

Le soft du décodage matriciel est juste en dessous. Je l'ai voulu aisément modifiable et surtout compréhensible. Merci à tous pour votre aide.

matrixKeyboard V1.00

Image

Image

Image
Les gros m'aiment bien car je suis gros, les cons m'aiment bien car je suis con, mais les gros cons ne m'aiment pas car ce sont des gros cons.
Avatar de l’utilisateur
pfeuh
Messages : 816
Inscription : 12 févr. 2019, 07:05
Localisation : Choucroute et bière
Contact :

Lecture d'encodeur

Message par pfeuh »

ACX a écrit :Revois ton code. Même avec des encodeurs pourris ça doit marcher
Effectivement, j'ai revu mon code à la faveur d'une visite à un fablab (d'ailleurs, je m'y suis inscrit). En fait ce que je croyais faire sur front descendant, je le faisais sur front... Très mauvaise idée, car du coup l'opération faite sur front descendant était immédiatement annulée par celle faite sur front montant.

Le soft est en dessous. Il est rustique, un pointeur vers la variable à gérer, un callback pour l'appui du bouton et un autre callback pour le relâchement du bouton. La machine d'état utilisée permet de cadencer à 1 msec sans faire ralentir la boucle principale. L'anti-rebond n'est même plus nécessaire, le cadencement de la lecture à 1msec fait très bien le job.

Encoder V1.0

Toujours à ce fablab, j'ai eu le plaisir de constater a l'oscilloscope qu'on lisait 1 entrée analogique 12 bits d'arduino en 125µs et non pas en 1 msec comme je l'avais déjà lu plusieurs fois. Du coup, ça ne me parait plus incongru de les utiliser pour du volume, du pitchbend, de la modulation ou d'autres contrôleurs.

A+

Pfeuh
Les gros m'aiment bien car je suis gros, les cons m'aiment bien car je suis con, mais les gros cons ne m'aiment pas car ce sont des gros cons.
Portamento
Messages : 306
Inscription : 01 nov. 2012, 12:17
Localisation : Pau
Contact :

Re: Clavier midi, comment ça marche?

Message par Portamento »

J'utilise cette fonction maison:

Code : Tout sélectionner

int Encoder(int MinEnc,int MaxEnc,int InitEnc,int Increment){
      static boolean MemoEncA,MemoEncB;

      int Valeur=constrain(InitEnc, MinEnc,  MaxEnc); 
      boolean EncA=digitalRead(ENC_A);
      boolean EncB=digitalRead(ENC_B);
      int SensEnco = 0;
      if(EncA != MemoEncA || EncB != MemoEncB) {   // Ca a bougé
            if      (MemoEncA == EncB && MemoEncB != EncA) { SensEnco = 1;}
            else if (MemoEncB == EncA && MemoEncA != EncB) { SensEnco = -1;}
            MemoEncA = EncA;
            MemoEncB = EncB;
            if (EncA==EncB){Valeur+=SensEnco*Increment;}
      }
      return constrain(Valeur, MinEnc,  MaxEnc);
}
Pour l'utiliser, tu l'appelles directement dans ta variable et dans une boucle à 2ms.
(par exemple : pourcent=Encoder(0,100,pourcent,1); )
http://www.oZoe.fr" onclick="window.open(this.href);return false;
Répondre
cron