électronique & musique

électronique & musique

Instruments


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

CASQUAD, un synthé drone

Casquad est un synthé électronique destiné à la musique drone, qui possède 4 oscillateurs et un filtre passe-bas. Chaque oscillateur peut moduler l'oscillateur suivant, d'où le nom de Casquad. Le premier oscillateur peut également moduler la fréquence du filtre.



Extraits sonores (utilisation d'une reverb pour le troisième extrait) :



Les oscillateurs sont construits autour d'un circuit logique 4093, qui comporte 4 portes NAND à trigger de Schmitt à 2 entrées chacune. Le principe de fonctionnement de l'oscillateur basé sur ce type de circuit logique est décrit dans cet article.

L'oscillateur 1 est un LFO qui permet déclencher les oscillateurs audio et de moduler la fréquence du filtre. Les oscillateurs 2, 3 et 4 peuvent être envoyés vers le mixage audio ou non. Le volume de chaque oscillateur est réglable. Le filtre résonant de type passe-bas et de fréquence réglable est placé après le mixage audio. La sortie audio est mono, sur un jack.

L'ensemble de l'électronique est monté sur une carte de prototypage, et le tout est placé dans une boite en carton en guise de boitier. L'alimentation se fait via un bloc 9V standard type alim de pédale d'effet guitare.

03/01/2012
0 Poster un commentaire

Du mono à la stéréo

La combinaison d'un SID 8580 et d'un 6581 dans un même synthé stéréo me posait problème. Le son est différent, ce qui peut être intéressant mais ne correspondait pas vraiment à ce que je voulais. De plus les tensions d'alim sont différentes, ce qui compliquait le montage (sans toutefois devenir insurmontable pour autant..) J'ai donc dégoté un nouveau 8580 sur eBay pour 15€, et terminé de monter la deuxième carte SID, identique pour le coup à la première.

Le SID 6581 me reste donc sur les bras, disponible pour un projet futur...

Voir aussi cet article.


15/12/2008
0 Poster un commentaire

Premier morceau

Impatient de tester la bête, je me suis bien sûr mis à jougailler avec, dès que les composants nécessaires ont été connectés (à savoir la carte CORE et une carte SID). Pas encore d'écran ni de bouton pour pouvoir régler le son, j'ai donc utilisé l'éditeur java dispo sur le site ucapps.de (voir également ce topic du forum MIDIBOX).

Editeur de paramètres - (c) uCapps.de

Voici donc un morceau enregistré avec le synthé, en mono, et sans aucun effet ajouté, à partir d'un fichier MIDI trouvé sur le net. Pour ne pas trop dépayser mes SID, j'ai choisi la BO d'un jeu "d'époque" que les spécialistes reconnaitront...



15/12/2008
0 Poster un commentaire

Premiers sons

Le premier son est sorti du SID, il y a quelques jours déjà, mais j'ai manqué de temps pour écrire l'article.

Pour cet essai, la configuration est minimale : carte CORE + une carte SID connectée sur la table de mixage + clavier MIDI. Ce premier essai est monophonique avec un seul SID connecté.

L'alim est un bloc mural 12V continu 1A qui suffit amplement. D'ailleurs 12V c'est peut être un peu trop, car le régulateur 5V de la carte CORE chauffe pas mal. Il faudra peut être chercher à optimiser de ce coté là.

Première tentative :

OK, tout est en place, on prend sa respiration avant de brancher l'alim... A première vue tout va bien, rien n'a crâmé. Je joue quelques notes sur le clavier, et ... rien. Je revérifie les connexions, mais rien n'y fait, aucun son ne sort du SID, à part un bourdonnement lorsque je monte le volume en sortie. Je finis par tout débrancher ; il faut réfléchir.

J'ai des doutes sur la liaison entre le CORE et le SID. Je recherche sur le forum MIDIbox et je découvre qu'une broche de ma connexion n'arrive pas au bon endroit. Décidément encore un problème de câble... J'ai été trompé par les indications écrites sur la carte : la broche "SC" de la carte SID ne doit pas être connectée à la broche "SC" de la carte CORE, mais à "MD"... Il suffisait de le savoir. Je modifie ma connexion et je retente.

Deuxième tentative :

Même mode opératoire, avec la connexion corrigée, et là .. oh joie, ça marche !


11/11/2008
0 Poster un commentaire