Sintetizzatore virtuale MOZZI/Fishino by Gianroberto Negri

 

Fishino2

Correva l’anno 1973 quando membro di un complessino di paese , mi occupavo dell’impianto voci e del MiniMoog generando effetti, filtrando suoni….
Questo sino a che il reale proprietario del MiniMoog decise di andarsene… E ora che si fa ci eravamo chiesti?   Il Sintetizzatore ci serve, ormai chi viene ad ascoltarci se lo aspetta…
Arduo dilemma…
Caso voglia che data la novità introdotta da Robert Moog con il primo Sintetizzatore Analogico , molte riviste di elettronica si erano cimentate nella realizzazione di qualcosa di analogo. Lo avevano presentato a puntate con ampie spiegazioni sulla realizzazione, taratura, reperimento dei componenti, anzi alcune  avevano realizzato dei kit per aiutare chi come me abitava in un paesino dove la maggioranza delle persone non ne sapeva nulla di elettronica e tanto meno di Sintetizzatori analogici….
Però la maggioranza dei kit costava uno sproposito e le nostre finanze erano decisamente risicate…
Si decise , folli come eravamo di realizzare i circuiti stampati da noi armati di penna apposita, vetronite ed ovviamente Cloruro Ferrico per l’incisione…
Dopo circa un anno di prove, riprove , macchie di cloruro ferrico sulle maglie che scoprimmo a posteriori che non andavano più via con relative ire delle nostre madri e l’aver rinunciato alla paghetta per l’acquisto di transistor, operazionali , jack, manopole… il mostro era pronto e strano a dirsi funzionava anche piuttosto bene…
Era problematico districarsi tra la marea di cavetti che collegavano i vari moduli del sintetizzatore ed anche problematico dover cambiare posizione degli stessi ogni volta che si voleva generare qualche nuovo effetto…
Insomma era un continuo stacca , riattacca, prova…. No non mi soddisfa… ricambia configurazione con relativo stacca e riattacca….
Il MiniMoog era decisamente più semplice da configurare per generare suoni ed effettti desiderati senza doversi perdere tra una foresta di cavetti….
Passano gli anni ed iniziano ad apparire sul mercato i primi sintetizzatori digitali FM che si suonano decisamente bene ma la timbrica non è corposa come quella analogica ed il costo è decisamente sempre molto alto…
Si basano sui primi microprocessori apparsi in quel periodo sul mercato e permettono agli strumenti che li contengono di avere la potenza e versatilità di un micro computer…
Questo ne aumentava enormemente la versatilità…

Prima con i sintetizzatori analogici per poter aggiungere un nuovo effetto occorreva impostare collegamenti e parametri spostando cavetti per quelli modulari o addirittura costruendo un nuovo modulo da aggiungere a quelli già esistenti…
Con i sintetizzatori digitali bastava in molti casi aggiungere delle linee di codice a quello già esisteva e riprogrammare il microprocessore. Una notevole comodità per le case produttrici. Passa ulteriormente il tempo ed arriviamo ai giorni nostri in cui i ‘microcontrollori’ dilagano e la fanno da padroni. L’idea geniale è stata quella di includere in un unico chip tutte le funzioni e le periferiche che in un normale microprocessore erano realizzate mediante componenti esterni. In pratica un computer completo in unico chip con potenze di calcolo che fanno impallidire i più potenti microprocessori dell’epoca dei primi sintetizzatori digitali. Gli stessi sono però spesso complicati da programmare ed esigono sistemi di sviluppo spesso molto costosi. In questa nostra epoca ad un tal Banzi è venuta in mente un formidabile idea: Perché non progettare una scheda di piccole dimensioni, di ottima potenza di calcolo, di ampia versatilità ed espansione ma estremamente facile da programmare senza aggiungere altro?

E’ nato Arduino o come viene chiamato ora Genuino. Essendo un progetto open source molti ne hanno fatto dei cloni ed addirittura alcuni hanno realizzato delle versioni che sono restate completamente compatibili con il progetto ma con delle notevoli  funzionalità aggiunte. Questo è il caso di FISHIINO in cui sulla medesima scheda sono stati aggiunti: Un RTC con batteria  a tampone, un lettore/scrittore di micro sd e dulcis in fundo un rete Wi_Fi ad alte prestazioni. Con un costo molto basso ci troviamo con tutte quelle funzionalità utili che per averle su Arduino occorreva acquistare tre shield che avrebbero portato il costo totale ad una cifra decisamente più alta di Fishino. Bene dopo questa lunga premessa è giunto il momento al grido di ‘pane ed infortronica per tutti’ di buttarci nello sviluppo di un progetto che da come avrete già capito dalla premessa è legato alla musica elettronica. A causa del fatto che mio malgrado ho contratto il Morbo di Parkinson e quindi la mia manualità riguardo a maneggiare, saldare e quanto di simile è diminuita, rispetto al progetto che avevo in mente inizialmente, ho deciso di realizzare un embrione di sintetizzatore virtuale che collegato o via seriale o meglio in seguito via WIFI a Fishino ne utilizzi le potenzialità quale motore di generazione di sintesi sonora.

In pratica il sistema funzionerà cosi:

  • Un programma realizzato in visual basic 2010 con le seguenti caratteristiche:
    • Presentare a video i controlli atti a pilotare il sintetizzatore realizzato con Fiishino
    • Colloquiare mediante opportuno protocollo realizzato su misura con Fishino:
      • Via Seriale o in seguito  anche via WIFI.
  • Un programma realizzato su fishino che utilizzando la libreria di sintesi e  generazione sonora MOZZI permetta di trasformare la scheda in  un reale sintetizzatore digitale, con effetti tipici di questi strumenti musicali
    • Ovviamente anche in questo caso il colloquio con e da visualbasic 2010 è realizzato mediante protocollo realizzato su misura.

È mia intenzione evolvere nel tempo il tutto aggiungendo funzionalità ed effetti che spiegherò passo, passo. Quello che stò presentando ora è solo un embrione di quello che il sintetizzatore diventerà nel futuro, embrione atto a dimostrare le funzionalità e le  potenzialità della sinergia Fishino / Mozzi / Visual Basic .net unitamente alla spiegazione di come si realizza un protocollo. Protocollo che ora gestisce solo l’invio dei comandi a Fishino che poi gestirà ovvviamente anche le risposte a tali comandi provenienti da Fishino. Bene , prima di addentrarci nel progetto vero e proprio è doveroso introdurre la libreria MOZZI che andremo ad utilizzare.

La troviamo a questo indirizzo: http://sensorium.github.io/Mozzi/

E’ una libreria open source che sopperisce alle scarse possibilità di generazioni sonore di ARDUINO e anche di Fishino. In pratica trasforma nel nostro caso Fishino in un versatile sintetizzatore senza la necessità di utilizzare hardware esterno. È molto potente e versatile e le generazioni sonore che offre possono appagare anche il più esigente dei musicisti. Vediamone alcune caratteristiche e possibilità:

  • Frequenza di campionamento audio a 16384 Hz con risoluzione Standard a 9 bit e HIFI a 14 Bit.
  • Controllo variabile da 64Hz in su a disposizione dello sviluppatore.
  • Generatori d’inviluppo ADSR, Oscillatori, Filtri, Ritardi, Campionatori… Tutta ‘roba’ molto familiare a chi usa i sintetizzatori.
  • Più di 30 sketches per prendere confidenza con essa.
  • API molto dettagliate e complete.

Insomma un autentica manna per chi si occupa di generazione sonora e sintetizzatori.

Ma vediamo più in dettaglio come è configurata e per questo facciamo capo alla figura 1 riportata di seguito:

figura 1

figura 1

L’interfaccia tra Mozzi e l’ambiente Arduino consiste di quattro funzioni principali. Questi sono startMozzi () , updateAudio () , updateControl () eaudioHook () , visibile nella sezione “user space” nella figura. Tutti e quattro sono necessari per per la compilazione di uno Sketch Mozzi.

La funzione startMozzi (control_rate) va inserita in setup (). Con essa si attiva il controllo e i temporizzatori per la generazione dell’ audio.
Nella funzione updateControl () và inserito il codice di gestione e controllo delle frequenze degli oscillatori, dell’adsr, dell’lfo dei filtri, ecc.
Viene eseguita in maniera relativamente lenta. In updateAudio () và inserita il codice di sintesi audio.
Questa viene eseguita in media 16384 volte al secondo, perciò per non rallentare la generazione il codice deve essere poco. L’unico altro requisito rigoroso è che restituisce un numero intero compreso tra -244 e 243 in modalità standard o -8192 e 8191 in modalità Hi-Fi. Infine audioHook () va inserita in loop(). Essa gestisce updateAudio () e si prende cura di riempire il buffer di uscita audio. Mozzi utilizza gli interrupt (ISR) per gestire le sue funzionalità e per farlo in maniera estremamente veloce ed affidabile. StartMozzi () imposta due interrupt, uno per l’uscita audio ad una frequenza di campionamento di 16384 Hz e un interrupt che può essere impostato dall’utente a 64 Hz o più, in potenze di due. In modalità STANDARD, i timer interni utilizzati da Mozzi sui processori ATmega sono il timer a 16 bit 1 per l’audio e 8 bit Timer 0 per il controllo. HIFI modalità impiega inoltre Timer 2 con Timer 1 per l’audio. Utilizzando il Timer 0 Mozzi disabilita le funzioni temporali Arduino Millis () , micros () , delay () e delayMicroseconds () . Ciò consente di risparmiare tempo del processore che verrebbe speso per gli interrupt e l’azione di blocco del ritardo () funzioni. Esistono delle sostituzioni di queste funzioni e sono elencate nella home page Mozzi sotto Avvertenze e soluzioni temporanee. Il buffer di uscita ha 256 celle che equivale a una latenza massima di circa 15 millisecondi. La libreria invia le operazioni di controllo al buffer senza interrompere l’uscita audio.

Ma vediamo un esempio in pratica:
Inizieremo generando un’onda sinusoidale sino ad arrivare a generare un vibrato.

Verrà spiegato il tutto passo, passo…

La prima cosa obbligatoria da fare è inserire all’inizio:

#include <MozziGuts.h>

Poi per avere un oscillatore e wavetable inseriremo altre due righe ed il codice a questo  punto sarà:

#include <MozziGuts.h> // Questo fa funzionare tutto 
#include <Oscil.h>   // un modello per un oscillatore 
#include <tables/sin2048_int8.h>  // una wavetable per generare un onda sinusoidale

L’include Oscill.h è la classe dell’oscillatore  che verrà utilizzata nel codice per istanziare appunto uno o più oscillatori.

Oscil <table_size, update_rate> name(table_data);

L’oscillatore deve essere creato utilizzando i valori alfanumerici inseriti all’interno delle parentesi > <.
Questo permette al compilatore di fare alcuni calcoli in fase di compilazione, invece di rallentare l’esecuzione ripetendo le stesse operazioni più e più volte, mentre il programma viene eseguito. La tabella utilizzata da un oscil deve essere una potenza di due, composta tipicamente da almeno 256 caselle. È importante capire che più sono e minore rumore di fondo avremo. La frquenza di aggiornamento sarà data da AUDIO_RATE .

3 Commenti

  1. interessante applicazione tra visualstudio 2010 e fishino. interessante la spiegazione della libreria mozzi resa semplice per tutti.
  2. splendido progetto, proverò a repricarlo. Se uso un fishino Mega invece di un fishino uno devo modificare qualcosa o prendere degli accorgimenti? Grazie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Main Menu