électronique & musique

électronique & musique

Festival D

Je serai présent au Festival D, le festival des techno-bricoleurs organisé par l'association Ping qui se tiendra au Lieu Unique à Nantes le samedi 31 mai et dimanche 1er juin. J'y présenterai mes instruments en carton, et je serai ravi de répondre à toutes vos questions.

 

A samedi !

 


18/05/2014
0 Poster un commentaire

ALGONOIZER

ALGONOIZER est un générateur de sons construit autour d'un Arduino, basé sur cet article de Vizmut, créateur d'IBNIZ. Il produit des sons allant du bruit à des séquences plus ou moins musicales.

 

2014-03-25 23.40.28_400px.jpg

 

Extraits sonores :

 

La génération sonore est basée sur la notion de dépassement d'entier. Le type entier int de l'Arduino est codé sur 16 bits, et peut représenter les valeurs comprises entre -32768 et 32767. Si l'on ajoute 1 à une variable int valant initialement 32767, le résultat n'est pas 32768 comme on pourrait s'y attendre, mais -32768. En effet, le codage du plus grand nombre est représenté par tous les bits à "1", et le fait de lui ajouter 1 réinitialise tous les bits à "0". Ce phénomène s'appelle dépassement d'entier.

 

Le fait d'ajouter 1 continuellement à un entier permet donc de faire varier cet entier de manière cyclique entre -32768 et 32767 de la manière suivante :

-32768, -32767, -32766, ..., 32765, 32766, 32767, -32768, -32767, etc...

 

debord_entier.jpg 

 

Si on trace la valeur obtenue au fil des additions, on obtient une onde en dent de scie de période 65575 opérations. Si l'on contrôle la fréquence à laquelle les opérations sont effectuées, on peut donc contrôler la fréquence de l'onde. Par exemple si la fréquence de calcul est de 65.5kHz, les 65575 additions durent 1 seconde, et l'onde a pour fréquence 1Hz. Si au lieu d'ajouter 1 on ajoute 100, la fréquence de l'onde devient 100Hz, et cette onde est maintenant une onde audio.

 

On peut ajouter de la complexité et ne pas se contenter de simples additions : multiplications, divisions, opérations logiques, etc.. permettent de moduler l'onde et d'obtenir des sons (bruits ?) variés. Le code de l'ALGONOIZER intègre des fonctions trouvées sur le site cité plus haut, et des fonctions "maison", pour un total de 16 fonctions sélectionnables par un bouton rotatif. Deux autres boutons permettent de moduler la fonction sélectionnée. Un quatrième bouton permet de régler le volume de sortie.

 

L'ALGONOIZER dispose aussi d'un oscillateur LFO utilisé pour la modulation. La forme d'onde du LFO est réglable par un bouton : carré, sinus, triangle, rampe montante et rampe descendante. La fréquence est réglée par un bouton poussoir (du type tap tempo). Le bouton poussoir dispose d'une LED qui reproduit le cycle du LFO et permet de visualiser la fréquence définie.

 

La modulation est disponible sur chacun des paramètres audio : le volume de sortie, les deux paramètres agissant sur la fonction de génération sonore, mais également le choix de la fonction de génération. A partir d'une position de départ de chacun des potentiomètres de réglage, le mode de définition de la modulation par le LFO est enclenché en maintenant appuyé le bouton poussoir du LFO, et en modifiant les valeurs des potentiomètres que l'on veut contrôler par le LFO. Lorsque l'on relâche le bouton poussoir, le LFO module les paramètres audio correspondant entre leur valeur initiale qui a été sauvegardée, et la valeur instantanée définie par la position du potentiomètre. Attention toutefois, le code n'est pas parfait et le LFO et la modulation ne fonctionnent pas toujours très bien (comportement parfois erratique du LFO)...

 

Du point de vue technique, le code est basé sur l'utilisation des interruptions sur l'Arduino. Pour cela les registres TCCR1A, TCCR1B et TIMSK1 sont utilisés pour définir le mode "8-bit fast PWM" sans prescaler, et pour activer l'interruption sur le débordement de TIMER1. Dans ces conditions la routine d'interruption est exécutée à une fréquence de 62.5KHz. On utilise une interruption sur deux pour la génération audio, et l'autre pour le calcul du LFO. Soit une fréquence d'échantillonnage audio de 31.25KHz.

 

Le LFO est basé sur des tables d'ondes. Pour chaque forme d'onde, les valeurs sont stockées dans des tableaux, ce qui évite d'avoir à les recalculer en cours d'exécution.

 

Les calculs audio sont donc réalisés au sein de la routine d'interruption, et envoyés vers la sortie PWM. La boucle principale loop() est utilisée pour la lecture des potentiomètres et du bouton poussoir. Les potentiomètres sont connectés aux entrées analogiques, et la lecture est faite à l'aide de la fonction analogRead(). La vitesse d'acquisition est augmentée en modifiant la valeur du prescaler du convertisseur (voir cet article sur le convertisseur de l'Arduino et sur l'augmentation de la vitesse de conversion).

 

Le code peut être téléchargé ici (développé avec l'IDE Arduino v1.0). Attention, code non totalement fonctionnel, encore à améliorer en particulier au niveau du LFO.

 


26/03/2014
0 Poster un commentaire

Le Raspberry Pi à Stereolux

Le Raspberry Pi est à l'honneur en ce début d'année à Stereolux à Nantes.

 

Tout d'abord le 15/01, une journée atelier découverte animée par Andy Farnell, qui avait déjà co-animé les rencontres Pure-Data l'an dernier, à Stereolux également.

 

Puis une conférence le 23/01 soir, par Tarek Ziadé et Jonathan Schemoul.

 

L'année commence bien!



08/01/2013
0 Poster un commentaire

Installer ChucK sur le Raspberry Pi

J'ai récemment acquis un Raspberry Pi (chez Pi Hut, reçu sous quelques jours), avec l'espoir secret d'en faire une plateforme audio sur laquelle tourneraient mes scripts ChucK et Pure Data entre autres, pilotables en MIDI ou OSC. Etant relativement novice en ce qui concerne Linux, il m'a fallu batailler pour installer ChucK, mais finalement ça fonctionne. Voilà comment je m'y suis pris.

 

 

Première tentative

 

Ma première tentative a consisté à installer ChucK à l'aide d'apt-get (l'outil de gestion des paquets sous Linux) :

 

sudo apt-get install chuck

 

Apt-get télécharge et installe ChucK sans problème. Mais impossible de l'éxécuter :

 

chuck test.ck 
[chuck]: (via rtaudio): no devices found for compiled audio APIs! 
[chuck]: cannot initialize audio device (try using --silent/-s)

 

Apt-get a en fait installé plusieurs éxécutables, dont un certain "chuck-alsa". J'essaie alors de lancer mon script "test.ck" avec celui-ci, et cette fois cela fonctionne :

 

chuck-alsa test.ck

 

Je m'aperçois rapidement que la version installée par apt-get n'est pas la dernière version, et que certaines fonctionnalités manquent. En particulier la communication par OSC ne fonctionne pas, ce qui me pose problème. Je décide donc de tenter de compiler la dernière version de ChucK sur mon Raspberry.

 

 

Compilation de ChucK sur le Raspberry Pi

 

Les fichiers suivants sont nécessaires à la compilation de ChucK :

 

Installation de la librairie ALSA

 

Bien qu'ALSA soit installé et configuré sur le Raspberry Pi, la librairie nécessaire à ChucK n'est pas présente. Après avoir téléchargé le fichier alsa-lib-1.0.25.tar.bz2 dans un répertoire temporaire, lancer la compilation et l'installation de la librairie :

 

tar -xjf alsa-lib-1.0.25.tar.bz2 
cd alsa-lib-1.0.25 

sudo ./configure 
sudo make 
sudo make install

 

Le répertoire /usr/include/alsa est alors créé.

 

Installation de libsndfile

 

Même principe que ci-dessus :

 

tar -xvf libsndfile-1.0.25.tar.gz 
cd libsndfile-1.0.25 
sudo ./configure 
sudo make 
sudo make install

 

Installation de ChucK

 

J'ai suivi les instructions données sur //chuck.cs.princeton.edu/doc/build/ 

 

tar xvzf chuck-1.3.1.3.tgz 
cd chuck-1.3.1.3/src/ 
sudo make linux-alsa

 

Un nouvel éxécutable est alors créé dans le répertoire en cours. La commande suivante permet d'afficher la version :

 

./chuck -h

chuck version: 1.3.1.3 (chimera)

 

C'est donc bien la dernière version 1.3.1.3 qui est maintenant installée. Après quelques tests, tout semble fonctionner. Il faudra toutefois faire attention à l'utilisation de la CPU qui est relativement élevée. Il sera sans doute bon d'optimiser un peu les scripts, et peut être de lancer ChucK avec un taux d'échantillonnage réduit.

 

Si vous avez installé initialement ChucK avec apt-get, vous pouvez le désinstaller avec :

 

sudo apt-get remove chuck

 

et ensuite installer l'éxécutable nouvellement compilé avec :

 

sudo make install

 

L'éxécutable chuck sera alors copié dans le /usr/bin et pourra être lancé directement depuis n'importe quel répertoire.

 

Dernière chose, par défaut le son est envoyé sur la prise HDMI. Pour activer la sortie sur la prise jack :

 

sudo amixer cset numid=3 1

 

 

Conclusion

 

L'installation avec apt-get est simple et immédiate, mais installe une version un peu ancienne qui manque visiblement de quelques fonctionnalités. La compilation de ChucK et des dépendances nécessaires s'est avérée relativement simple, et conduit à la dernière version du logiciel. Je conseille donc vivement cette voie à tous ceux qui écrivent des scripts un peu évolués.


02/01/2013
0 Poster un commentaire

Journées Pure Data à Nantes

Stereolux organise à Nantes, à La Fabrique, les 29 et 30 mars, deux journées consacrées au logiciel libre de synthèse sonore Pure Data. Au programme conférences et ateliers, avec la participation entre autres de Miller Puckette, à l'origine du développement du logiciel.

 

Et le 29, soirée performances.

 

Un évènement comme ça à coté de chez soi, et gratuit qui plus est, ça ne se manque pas, j'y serai donc.

 

Programme et réservation sur le site de Stereolux : ici.

 

 


27/03/2012
0 Poster un commentaire