dimanche 18 mai 2014

Identifieur d'accords MIDI (Arduino)

Voici comment construire soi-même, au moyen d'un Arduino, un dispositif qui, lorsqu'il est branché dans un clavier MIDI, affiche le nom de l'accord qui est joué au clavier:  C, Bmaj7, Esus2, etc.  Ça pourrait être utile, par exemple, pour un musicien qui désirerait transcrire les arrangements d'une pièce qu'il joue à l'oreille.  Un étudiant pourrait également s'entraîner à jouer des accords et utiliser l'appareil pour vérifier qu'il a joué la bonne chose.

Matériel nécessaire:

- Arduino
- Afficheur LCD 16 X 2
- Shield MIDI tout fait, ou optocoupleur pour faire le lien entre entre l'Arduino et le clavier MIDI.

Connexions MIDI

J'ai déjà expliqué dans ce précédent article comment procéder pour relier l'Arduino à un clavier MIDI par l'entremise d'un optocoupleur (schéma ci-dessous).   Une autre option consiste à utiliser un shield MIDI commercial.  Dans ce cas, vous n'avez besoin que de la réception du message (par la pin 0 "Rx" de l'Arduino);  l'Arduino n'enverra aucun message MIDI en direction du clavier.



Connexions de l'afficheur LCD

Ce sont les mêmes branchement que dans ce tutoriel du site officiel Arduino.   Dans le schéma ci-dessous, le rétroéclairage n'est pas branchés (pins 15 et 16 de l'afficheur).


Sketch

Pour simplifier les choses, j'ai utilisé la bibliothèque MIDI.  Lorsqu'on lâche une touche, mon clavier Yamaha n'envoie pas de messages "note off" mais plutôt des messages "note on" de vélocité 0.  Vous pourriez avoir à modifier légèrement le sketch si votre clavier utilise des messages "note off".

En gros, l'Arduino tient un registre des notes du clavier qui sont enfoncées.  Puisque l'octave n'a pas d'influence sur le nom de l'accord, ces notes sont ensuite normalisée (on soustrait 12 au numéro MIDI de chaque note, jusqu'à ce que le numéro se situe entre 0 (do) et 11 (si).  Ces notes normalisées sont triées, et on supprime celles qui se répètent (par exemple, le musicien pourrait avoir enfoncés deux touches "do" situées sur deux octaves différents).

Il reste ensuite à identifier les accords en fonction des intervalles entre les notes.  Par exemple, un accord majeur est formé de sa fondamentale, de la tierce (située 4 demi-tons plus haut que la fondamentale) et de la quinte (située 7 demi-tons plus haut que la fondamentale).  Pour do majeur, ce sera do-mi-sol, donc 0 - 4 - 7.  Toutefois les choses se compliquent un peu car la note la plus basse n'est pas nécessairement la note fondamentale.  Par exemple, un sol majeur est formé par les notes sol-si-ré, mais mes notes normalisées apparaîtront plutôt dans l'ordre ré-sol-si (donc 2 - 7 - 11).  La plus grande partie du sketch tente donc de donner un nom à l'accord en fonction des intervalles entre les notes jouées (d'une façon qui pourrait probablement être plus élégante, je l'admet!).




Le sketch reconnaît une douzaine de types d'accords différents (majeur, mineur, cinquième, septième, suspendu, etc.) et le dispositif est donc capable d'identifier la majorité des combinaisons de 3 ou 4 notes. Je ne me suis pas donné la peine de reconnaître tous les types possibles d'accords de neuvième:  à vous de compléter le sketch si vous cherchez quelque chose de plus exhaustif.  Certaines combinaisons de notes peuvent porter plus qu'un nom:  quand c'est le cas, un seul nom est affiché.




Yves Pelletier (Twitter:  @ElectroAmateur)

Aucun commentaire:

Enregistrer un commentaire