mardi 14 janvier 2014

Fabrication d'un arpégiateur MIDI à base d'Arduino

Cet article a été mis à jour le 6 décembre 2020 (compatibilité avec la version actuelle de la bibliothèque MIDI).

Après avoir transformé mon Arduino en séquenceur MIDI, voici un projet où l'Arduino servira plutôt d'arpégiateur MIDI.

Lorsque cet arpégiateur est branché à un clavier MIDI, il s'agit d'enfoncer quelques touches du clavier de façon à former un accord:  votre clavier se met alors à jouer les notes qui correspondent aux touches enfoncées, mais de façon séquentielle (arpège).  Cet arpège est jouée en boucle, à une vitesse réglable par un potentiomètre, même après que les touches du clavier aient été relâchées.  Vous formez un autre accord sur le clavier et le nouvel arpège est joué en boucle...vous voilà transformé en virtuose de la musique nouvel-âge!  L'intérêt de ce dispositif, c'est que vous pouvez obtenir des effets très intéressants en exécutant l'arpège beaucoup plus rapidement que vous ne pourriez le faire vous-mêmes, et vos mains peuvent jouer autre chose pendant que les arpèges sont répétés.

Le circuit

Le circuit est le même que pour mon séquenceur, mais avec un bouton et une LED en moins: donc un Arduino Uno auquel on branchera un circuit de communication MIDI, un interrupteur, une LED indicatrice et deux potentiomètres.

Je présente donc pour la troisième fois le schéma du circuit de communication MIDI, pour plus de détails je vous invite à consulter l'article complet.  Il existe des shields déjà prêts à l'emploi, le plus connu est probablement celui conçu par Sparkfun


Sans surprises l'interrupteur "on-off" servira à mettre l'arpégiateur en fonction, et à l'arrêter (sinon, vos arpèges continueraient de jouer jusqu'à ce que vous débranchiez l'Arduino...).  Remarquez qu'il s'agit d'un interrupteur à deux positions (on-off) et non d'un bouton-poussoir momentané.  Cet interrupteur est placé entre l'entrée 7 de l'Arduino et la masse (GND).   Nul besoin d'ajouter une résistance, puisque le sketch utilise la résistance pull-up interne de cette broche.

La LED s'allumera pour indiquer que l'arpégiateur est en fonction:  on la branche entre la broche 9 de l'Arduino et la masse (GND), en n'oubliant pas de lui associer une résistance protectrice de 220 Ω.

Finalement, un premier potentiomètre (de 10 kΩ ou plus) est branché à l'entrée analogique A0 de façon à contrôler la vitesse à laquelle les arpèges seront exécutés.  J'ai aussi ajouté un deuxième potentiomètre (branché à A1) qui permet de modifier le programme MIDI, c'est à dire la sonorité utilisée par votre clavier pour jouer les sons (onde carrée, piano, cornemuse, etc.).  Ce potentiomètre n'est pas essentiel, mais il peut permettre des effets intéressants.

Le dessin ci-dessous illustre toutes les connexions autres que la liaison MIDI qui avait déjà été illustrée plus haut.


La bibliothèque MIDI

Pour utiliser avec succès le sketch qui se trouve à la fin de cet article, il faut avoir installé la bibliothèque MIDI de Forty Seven Effects.  Pour ce faire, on peut passer par le gestionnaire de bibliothèques.


Le sketch

Il faut d'abord savoir quelles touches du clavier sont enfoncées.  Puisque le protocole MIDI fonctionne à base de messages "note on" (lorsqu'une nouvelle touche est enfoncée) et "note off" (lorsqu'une touche est relâchée), le sketch utilise ces messages pour tenir à jour un registre des touches enfoncées (c'est le tableau touchesActives[]).  

La première version de mon sketch se contentait de jouer en arpèges les touches enfoncées, et les arpèges s'interrompaient aussitôt qu'on relâchait les notes.   Cette interruption engendrait un effet sonore plutôt désagréable chaque fois qu'on changeait d'accord sur le clavier, c'est pourquoi j'ai modifié mon sketch pour que les arpèges continuent d'être joués après que les touches aient été relâchées.

Ça complique un peu le programme, car il est impossible pour le musicien de relâcher toutes les touches exactement au même moment:  on attend donc qu'un même accord soit maintenu pendant  au moins 50 millisecondes avant de le copier dans le tableau notesActives[], qui contient les notes qui doivent être jouées en arpège.

Voilà!  Bien entendu, il serait relativement facile de fusionner ce sketch avec celui du séquenceur pour qu'un même appareil puisse remplir n'importe laquelle de ces deux fonctions.

- -

À lire également

Beaucoup d'autres projets MIDI avec l'Arduino:

Yves Pelletier (Twitter:  @ElectroAmateur)

Aucun commentaire:

Enregistrer un commentaire