[Résolu] Clavier capacitif MIDI - jouer plusieurs notes en même temps

Bonsoir,

Après avoir réalisé le projet sur Instructables suivant, je me demandais si il était possible de jouer plusieurs notes en même temps (pour faire un accord, par exemple) ?

J'ai fait pas mal de recherches sur internet, mais je n'ai rien trouvé de vraiment concluant...

Merci d'avance !

Bonsoir pepe,

Merci beaucoup pour cette réponse très complète !

En revanche, quand tu parles de clavier matricé, pourrais-tu être un peu plus explicite ? Je débute sur Arduino, je suis loin de tout maîtriser encore :p Je pense toutefois avoir la capacité de comprendre, avec un morceau de code en exemple, ou un lien vers un tuto...

Merci encore ;)

Un clavier matricé est câblé en grille, avec une touche à chaque intersection d'une ligne et d'une colonne (L,C).+ 1 diode par interrupteur.

On ne doit pas appuyer 2 touches à la fois sinon on a deux lignes (L1, L2) et 2 colonnes (C1, C2) actives à la fois, ce qui ne permet pas de savoir quelles touches sont appuyées (L1C1 ou L1C2 ou L2C1 ou L2C2 ?).

Merci Christian_R pour ta contribution :)

Quand tu dis :

Christian_R: Un clavier matricé est câblé en grille, avec une touche à chaque intersection d'une ligne et d'une colonne (L,C).+ 1 diode par interrupteur.

On ne doit pas appuyer 2 touches à la fois sinon on a deux lignes (L1, L2) et 2 colonnes (C1, C2) actives à la fois, ce qui ne permet pas de savoir quelles touches sont appuyées (L1C1 ou L1C2 ou L2C1 ou L2C2 ?).

Ça veut donc dire que je ne pourrais pas implémenter un système/code pour pouvoir jouer deux ou plusieurs notes en même temps ?

J'ai peur de ne pas très bien comprendre...

Merci.

Pour avoir de la polyphonie avec beaucoup de touches mais peu d'entrées / sorties sur l'arduino on peut multiplexer les entrées avec un composant additionnel : http://playground.arduino.cc/learning/4051

Merci pour vos réponses :slight_smile:

pepe, tu m’expliques :

pepe:
Pour être clair, oui, tu peux faire un clavier polyphonique. Il suffit d’adapter le logiciel :

  • toutes les touches doivent être lues continuellement,
  • quand l’appui sur une touche est détecté, un message “noteON” avec le numéro de note correspondant à la touche doit être émis,
  • quand le relâchement d’une touche est détecté, un message “noteOFF” avec le numéro de note correspondant à la touche doit être émis.
    La détection du changement d’état des touches et l’anti-rebond nécessite seulement de prévoir des variables différentes pour chaque touche.

J’ai l’impression que c’est pourtant ce que je fais avec le code suivant :

for( int i = 1; i <= numberOfInputs; i++) { //Send a MIDI message for the corresponding input

if (total > Thresshold && !midi_on*) {
_
sendMidi(0x90, pitch + i, velocity); _
midi_on = true;
_ }_
if (total < Thresshold && midi_on) {
_ sendMidi(0x90, pitch + i, 0);//turn note on*
midi_on = false;
* }*_

* } // end for*

} // end loop
//send MIDI message
void sendMidi(int Statusbyte, int Databyte1, int Databyte2) {
* if (midiMode) {*
* Serial.write(Statusbyte);//send note on or note off command*
* Serial.write(Databyte1);//send pitch data*
* Serial.write(Databyte2);//send velocity data*
* }*
Pourtant, lorsque j’appuie sur deux notes exactement en même temps par exemple, ça ne va m’en jouer qu’une seule.
Merci encore à vous.

Christian_R, je ne vois pas à quoi peuvent servir les diodes, si ce n'est précisément d'empêcher les retours de commande, donc de pouvoir utiliser la matrice avec plusieurs touches simultanées ?

Merci pepe !

C'était effectivement la bonne solution :) Je viens d'aller faire un tour sur la doc de la norme MIDI, c'est beaucoup plus clair pour moi désormais ! Mais je ne pense pas que j'aurais trouvé tout seul (je ne suis qu'un petit débutant).

Merci pour cette aide précieuse et navré d'avoir usé de votre temps... :)