venerdì 25 gennaio 2013

UN CARILLON AUTOGENERATIVO CON ARDUINO

Dopo anni passati a programmare microcontrollori Motorola 68HC11 o Microchip PIC per progetti di robotica o musicali, la scoperta di Arduino è stata come una ventata di ossigeno fresco.

Questo incredibile prodotto italiano è ormai un paradigma consolidato a livello mondiale per quanto riguarda l'hobbistica e la prototipizzazione di circuiti digitali. Il numero di progetti che lo utilizzano, le risorse disponibili in rete, i cloni e le varie espansioni disponibili (shield) ne sono la prova.

Dopo qualche prova per prendere confidenza con l'ambiente ho deciso di realizzare un progetto tutto mio, e partendo dall'idea di realizzare un giocattolo musicale per mia figlia, ho realizzato una buona base per sperimentare con algoritmi per musica autogenerativa ed è nato questo carillon autogenerativo.

Specifiche

Il carillon consiste di due voci (basso e melodia) generate casualmente sulla base di una scala pentatonica, anch'essa scelta casualmente.

La sequenza di base sono 4 battute da 4/4.

Il basso si muove sul quarto di nota, su un pattern di 2 battute ripetuto due volte.

La melodia è composta con ottavi di nota ed eventualmente pause, su un pattern completo di 4 battute. La melodia si muove ad almeno un'ottava sopra al basso.

Il primo giro di basso avviene senza la melodia, che entra in una delle seguenti battute, in base a una scelta casuale.

Dopo ogni giro completo di 4 battute, l'algoritmo decide se rigenerare le note del basso o della melodia o di entrambi.

La pressione di un pulsante esterno genera un interrupt che resetta l'algoritmo, impostando una nuova scala e un nuovo tempo.

Le scale pentatoniche memorizzate sono 24, 12 maggiori e 12 minori.

Il tempo di esecuzione può assumere uno dei valori preimpostati: 60, 90, 120, 180.


Dettagli Tecnici

All'avvio del software, il generatore casuale viene inizializzato con il valore presente nell'ingresso analogico 0 di Arduino. Se non vi è collegato nulla, il seme viene impostato casualmente in base al rumore, altrimenti è possibile impostare tramite un potenziometro uno specifico valore per il seme.

Uno switch software, da abilitare in fase di compilazione, aggiunge un ulteriore grado di variabilità, permettendo in fase di esecuzione l'alterazione momentanea di una nota della melodia di un semitono (viene eseguito il grado corrispondente della scala pentatonica immediatamente precedente o successiva a quella corrente).

La casualità delle variazioni nella struttura della melodia non è uniforme, ma è possibile impostare un peso per renderla più o meno variabile. Ad esempio mentre la scelta della scala e del tempo è equiprobabile, la probalitità che la melodia venga attivata dopo il primo giro di basso è del 75%, mentre la probabilità che una nota venga alterata di un semitono è del 10% (se l'alterazione è abilitata). Infine la probabilità che dopo un giro il basso o la melodia venga ricreata è del 50%. Tutti questi pesi sono costanti che possono essere impostate al momento della compilazione.

La generazione del suono avviene tramite due uscite PWM a ciu è collegato un trasduttore piezo. E' stata utilizzata la Tone Library by Rogue Robotics Open Source Code:

http://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation

Un'uscita digitale varia in base al tempo di esecuzione, potendo far lampeggiare dei LED a tempo di musica.

Tre uscite invece sono configurate per pilotare un LED RGB il cui colore continua a variare in base al tempo e la frequenza delle note suonate. 

Futuri Sviluppi Sperimentali

Sostituzione della generazione interna dei suoni con un'uscita MIDI in modo da utilizzare hardware musicale esterno.

Uscite digitali per pilotare solenoidi o servomotori a tempo di musica.

Implementazione di un approccio microtonale.


 
Scaricate il progetto qui: autocarillion_20171119.zip

 
IMPORTANTE: la Tone Library non è stata aggiornata per gli IDE Arduino successivi allo 0023. Per risolvere i problemi di compilazione negli ambienti di sviluppo più recenti basta editare il file Tone.cpp e sostituire l'import wiring.h con Arduino.h, come discusso anche nel forum Arduino qui. Oppure potete scaricare la mia versione già modificata qui

mercoledì 16 gennaio 2013

CRACKLEBOX

Con il termine Cracklebox (o Kraakdoos) si intende un tipo particolare di dispositivo audio sperimentale introdotto da Michel Waisvisz a metà degli anni 70. Michel Waisvisz insieme a Reed Ghazala può essere considerato a tutti gli effetti il pioniere del circuit bending e infatti la Cracklebox è un chiaro esempio applicativo di questa tecnica.
La particolarità di questo strumento consiste nel fatto che la generazione del suono dipende esclusivamente dall'interazione con il corpo umano, il quale è parte del circuito stesso. Questa interazione non è pericolosa in quanto questo dispositivo (come tutti quelli del contesto del circuit bending) è alimentato con una batteria e l'intensità delle correnti in gioco è veramente irrisoria. Dipendendo dalla conduttività locale della pelle umana, i rumori gracchianti e striduli (crackle) prodotti variano da persona a persona (e anche nel tempo), rendendo così le performance sempre uniche tra loro.


Crackle Box


Il cuore del circuito è uno dei primi amplificatori operazionali, il 709, e il suo funzionamento dipende proprio da questo specifico modello (ormai fuori produzione e di difficile reperibilità). Se si usa un operazionale attuale, anche compatibile al 100%, il circuito non può comunque funzionare come dovrebbe: tutti gli operazionali moderni hanno integrati dei sistemi di compensazione che li rendono troppo stabili e insensibili agli offset e derive di corrente causate dall'interazione col corpo umano, che amplificate producono proprio i rumori che vogliamo.


Se si riesce a recuperare un operazionale 709, gli altri componenti sono molto comuni e la realizzazione del circuito è abbastanza semplice e veloce.
Altrimenti avendo molti più soldi da spendere si può recuperare una Cracklebox usata degli anni 70 o una replica moderna attualmente ancora in vendita, aggiudicandosi così anche un oggetto da collezione.

Ma non serve spendere molto per avere queste sonorità. Chi ha sperimentato con il circuit bending avrà già scoperto molti casi in cui il semplice tocco di alcuni contatti di un circuito stampato può causare variazioni di pitch, glitch o suoni striduli dovuti a loop di feedback, ingresso di correnti parassite o saturazioni.

Si possono anche progettare ad hoc circuiti di semplici amplificatori molto sensibili e oscillatori controllati in tensione e dotarli di contatti metallici in modo da interferire con essi toccandoli. Questo approccio è utilizzato da svariati kit che si trovano in commercio per realizzare circuiti espressamente dedicati alla generazione di questo tipo di sonorità.





Io sono riuscito a reperire un paio di 709, con i quali ho realizzato due circuiti Cracklebox. Uno l'ho inserito nel mio sistema modulare sperimentale, The Sound Destruction Unit, mentre il secondo l'ho abbinato ad una Atari Punk Console creando il mio Tamagotchi Mannaro. Questi miei strumenti sperimentali e l'Atari Punk Console saranno descritti dettagliamente nei prossimi post, intanto vi lascio qualche anteprima.



Vi consiglio infine di leggere il mio precedente post sul circuit bending qui.