électronique & musique

électronique & musique

Arduino


Une beat box LoFi avec l'Arduino

Voici un petit projet de beat-box 8 bits avec séquenceur intégré qui ne nécessite aucun montage externe. Ce projet est basé sur le code de little-scale : Arduino Beats et sur l'article de mouro : Signal generator using Arduino and DDS.

Caractéristiques

Cette beat-box possède deux sections : une section rythmique, et une section mélodique permettant de jouer une ligne de basse. La partie rythmique est issue du code de little-scale. Elle est basée sur la reproduction de samples définis dans le code par l'intermédiaire des sorties PWM de l'Arduino. Il s'agit donc de samples codés sur 8-bits. La vitesse de reproduction peut être ajustée dans le code (ligne 30), ce qui modifie le timbre et la hauteur de l'instrument. La lecture des échantillons est gérée par la boucle principale.

La partie mélodique provient du code de mouro. Elle est basée sur la synthèse digitale directe. Une forme d'onde en sinus est échantillonnée sur une période et est décrite sur 8 bits dans le tableau sineTable. Les échantillons sont envoyés sur une sortie PWM de l'Arduino à une cadence dépendant de la note désirée. Je ne rentre pas ici dans le détail de l'algorithme utilisé, allez voir la page de mouro pour ça. Ce qui nous intéresse spécialement, c'est que la génération de la note est gérée par les interruptions de l'Arduino, à une cadence élevée. Cela permet d'obtenir une note juste, et de ne pas interférer avec la lecture des samples de la partie rythmique.

Les deux sections peuvent être jouées simultanément (partie rythmique et basse), mais chacune des sections est monophonique. Ce qui veut dire qu'on ne peut jouer qu'un sample rythmique à la fois, et qu'une note à la fois, mais qu'on peut avoir sur un même beat un sample rythmique et une note (suis-je clair ?..)


Séquenceur intégré

Comme je l'ai dit au début, la beat-box inclut un petit séquenceur. La programmation des séquences se fait dans le code directement. Le code doit donc être recompilé et chargé dans l'Arduino à chaque fois que l'on modifie la séquence.

Les patterns rythmiques sont définis dans le tableau beatPatterns. Chaque pattern contient 16 pas, qui peuvent être mis à 0 (silence), 1 (bass drum), 2 (snare), 3 (hit hat) ou 4 (crash). La partie rythmique du morceau est ensuite définie par le tableau beatSong, ou chaque valeur représente le numéro du pattern, numérotés de 0 à (nb de patterns - 1).

De même pour la ligne de basse, chaque pattern est défini sur 16 pas dans le tableau synthPatterns, dont chaque valeur représente la fréquence de la note jouée (en Hertz). Oui je sais, pas très pratique, mais un coup de Google vous donne rapidement la correspondance note/fréquence. Le tableau synthSong permet d'enchainer les patterns de ligne de basse dans le morceau.

Pour bien faire, les tableaux beatSong et synthSong doivent avoir la même taille...

Mise en oeuvre

Une fois le code compilé et chargé dans votre Arduino, récupérez la sortie de la partie rythmique sur la broche 10 et la ligne de basse sur la broche 9, et envoyez les vers votre ampli ou table de mixage (attention au volume..), sans oublier de reprendre la masse de l'Arduino.

Dès qu'il est mis sous tension ou reseté, l'Arduino va commencer la lecture des séquences programmées.

Pour aller plus loin

Beaucoup d'améliorations sont possibles. Sans modifier le principe, on peut définir d'autres samples pour la partie rythmique, ou une autre définition de forme d'onde pour la ligne de basse. D'ailleurs le code possède une fonction "cachée" : on peut en fait spécifier une forme d'onde "sinus", "carrée" ou "triangle" en mettant à la masse les entrées 2 et/ou 3 de l'Arduino.

On pourrait également améliorer la lecture des samples qui est basée sur la fonction delayMicroseconds relativement imprécise, et qui bloque l'Arduino tant que le sample n'est pas lu jusqu'au bout. De même il est sans doute possible de rendre la partie mélodique polyphonique en mixant les différentes notes.

Enfin une interface permettant de gérer le séquenceur pourrait être développée :  définition des séquences, lecture/stop, etc.. On peut aussi penser à la gestion par MIDI, à la synchro externe, etc, etc...


Téléchargez le code Arduino ici.

31/01/2011
0 Poster un commentaire

Arduino !

Ca y est, j'ai passé le pas, je viens de recevoir mon Arduino, acheté chez Lextronic pour 34 Euros port compris.

Arduino est une plateforme libre de développement digital basée sur un microcontrolleur ATMEGA, et sur un environnement de programmation très puissant et également libre.

La partie matérielle permet de disposer de toutes les connexions au microcontrolleur (alimentation, entrées, sorties), et comprend une interface série USB qui permet de se connecter directement au PC. L'ATMEGA dispose d'un nombre relativement important d'entrées/sorties, plus que de nécessaire pour la plupart des projets : entrées et sorties digitales, entrées analogiques, port série. Le matériel est très pratique à mettre en oeuvre, un peu à la manière d'une platine d'évaluation.

A mon avis l'aspect le plus intéressant de l'Arduino est son environnement de programmation. Le langage de programmation, très semblable au C, est très accessible et rapide à prendre en main. Il dispose des fonctions de haut niveau indispensables qui feront vite oublier l'assembleur ! C'est d'ailleurs LA raison qui m'a poussé à tenter l'aventure Arduino : j'ai longtemps tenté l'incursion dans le monde digital, mais les résultats obtenus n'ont jamais été à la hauteur du temps que j'y avais consacré. Je n'ai vraiment pas le temps de me plonger dans l'apprentissage d'un langage assembleur, et la simplicité de programmation de l'Arduino en fait certainement pour l'amateur la voie royale vers le digital.

L'inconvénient selon moi de l'Arduino est que son choix n'est pas optimisé pour la plupart des projets, et que ses capacités sont certainement sous employées la plupart du temps.

Il existe une importante communauté d'utilisateurs qui ne cesse de s'agrandir et qui permet d'apprendre et de partager. Pas mal de projets intéressants sur Internet (libres eux-aussi), comme par exemple le synthé Auduino ou bien cette pédale d'effet LoFi pour guitare.

Des heures d'expérimentations en perspective...


02/02/2010
0 Poster un commentaire