Bonjour. Ca va toi ?

Je ne savais pas vraiment comment faire mon retour ici, après tout ce temps... Et puis je me suis dit "Eh ben merde, allons-y comme si de rien n'était, même si ça fait bientôt deux ans que je n'ai pas écrit !"

Aujourd'hui, je vais vous présenter un projet qui m'est tombé dessus assez soudainement : un générateur de rythmes MIDI.

Bon, ok, depuis le dernier article, j'ai changé de boulot et je m'épanouis BEAUCOUP plus qu'avant, n'en déplaise à certains de mes anciens clients.

Générateur, séquenceur de rythmes disions-nous.

Mandala

J'ai posé cette image ici pour qu'elle apparaisse en page d'accueil, j'ai une assez faible expérience de Grav. Revenir bientôt sur WordPress ? Va savoir
Apprécions au passage la gravure du texte au laser :)

En fait à la base, j'avais envie de programmer un contrôleur MIDI qui fasse des variations aléatoires (mais contrôlées) autour d'un beat à la Amen break. Le but étant de faire de la drum & bass générative.

Alors oui, je sais bien, il y a des gens sur cette planète qui ont des délires bizarres, tu ne trouves pas ? Est-ce que j'en fais partie ? C'est possible. Mais n'oublions pas que la compétition est rude, et qu'il existe aussi des personnes pratiquant le cheval-balai.

Bref.

Dans mes recherches sur les techniques algorithmiques pour effectuer des variations supportables et pas complètement anarchiques, je tombe sur la notion de rythmes euclidiens.

Des rythmes euclidiens, merde ! Aucune idée de ce que c'est à ce moment-là.

Alors ça peut sembler pompeux comme terme, mais finalement l'idée est vraiment simple :

  • On a une grille de disons 16 emplacements de notes
  • On a un certain nombre de notes à placer sur cette grille, disons 3
  • On va placer les 3 notes de la manière la plus égale (au sens que les notes sont équidistantes) possible.

Evidemment, si 16 n'est pas divisible par le nombre de notes ça va générer des petits décalages, et c'est ce qui est intéressant.

Je discute donc de ça avec un de mes collègues qui traîne ses savates dans les synthétiseurs modulaires, et vu comme ça l'a emballé j'ai rapidement laissé mon générateur d'Amen break pour un séquenceur euclidien multipistes. Hé ouaiiiis mon pote.

L'idée est d'avoir un module autonome qui puisse balancer un signal MIDI vers un autre appareil qui lui, fera du son.

Le socle technique

La bête se base sur un microcontrôleur Teensy 3.2, qui dispose, rappelons-le, de :

  • Un CPU cadencé à 72MHz
  • 256KB de mémoire flash pour les programmes
  • 64KB de RAM
  • 24 pins exploitables facilement, dont 10 possiblement utilisables commes entrées analogiques.

Les besoins

Au départ, je suis parti sur une base de 4 pistes, et puis finalement, mon côté mégalomaniaque a décidé de doubler, et je l'ai écouté.

  • Huit boutons pour activer les pistes.
  • Quatre boutons pour changer de mode (t'inquiète pas, il y a une démo complète à la fin)
  • Quatre mémoires temporaires pour mémoriser des beats intéressants
  • Et trois boutons supplémentaires pour les réglages.

Ca nous fait déjà 19 boutons, et c'est sans compter les autres besoins en pins (EEPROM externe, connecteurs MIDI in et out, encodeur, LEDs)

Nous voici donc Gros-Jean comme devant.

J'adore placer cette expression, faut pas m'en vouloir. Merci.

Utilisation de shift registers

Pour pallier à ce problème (nombre d'entrées insuffisant par rapport au nombre de boutons), il existe un type de circuit intégré parfait : les shift registers (registres à décalage en français dans le texte). Dans ce cas précis, il nous faut un shift register du type PISO (Parallel in - Serial out). Le 74HC165 expose 8 entrées, et une sortie série, pilotée par un signal d'horloge.

Une bibliothèque très bien faite pour exploiter le 165 est disponible ici : https://github.com/InfectedBytes/ArduinoShiftIn

Et ce qui est formidable, c'est qu'on peut les chaîner ! Ooooooooh... Est-ce que ça signifie qu'avec trois 74HC165, je peux gérer 24 boutons en utilisant seulement 4 (voire 3) pins de mon microcontrôleur ? La réponse est oui. Et c'est beau.

Problème des boutons : réglé.

Utilisation de LEDs RGB

Un autre truc qui a de le gueule dans ce genre de projet à finalité artistique, c'est la lumière. Les couleurs.

Je me suis centré sur l'utilisation de LEDs RGB WS2812B (a.k.a NeoPixel chez AdaFruit). Et accessoirement j'ai découvert que d'acheter des composants électroniques directement chez le fabricant chinois via AliExpress, c'est DIABLEMENT plus économique.

A titre d'exemple, chez une boutique en France, les 5 LEDs WS2812B coûtent ~5€. A la sortie de l'usine, pour 5€, j'en ai 100, des LEDs.

Quoi qu'il en soit, piloter des NeoPixels en série est très simple, AdaFruit a publié une excellente bibliothèque à cet effet.

Affichage : Réglé.

Le reste est trivial, nom de bleu

L'envoi/réception de signal MIDI, le contrôle d'un encodeur rotatif... Non, en fait je crois qu'il est surtout temps de vous présenter la démo de ce contrôleur !

Démo !

J'entends dire ici ou là "ouiiiii t'es gentil avec tes explications en anglais"

Oui. Je suis gentil :)

On se revoit bientôt

Allez, je vais essayer d'écrire un peu plus ici cette année. J'avoue que je me suis laissé aller.

Bisous

Article précédent