CASE STUDY – Roland Juno 60 – Seconda parte

Written by Enrico Cosimi on . Posted in Tutorial

Come annunciato nella puntata precedente, dopo aver rinfrescato il funzionamento dello strumento originale, è il momento di lanciarsi nel reverse engineering; questa volta, contrariamente al solito, faremo un passo ambizioso stendendo sul tavolo operatorio un virtuosistico esempio di programmazione firmato Jörg Holzamer, programmatore N.I. che ha contribuito fattivamente alla Ensemble Library della storica Version 4 di Reaktor. In questa programmazione, ci sono diverse scelte che possono sembrare discutibili, costose o semplicemente personali: è il bello della programmazione object oriented, dove ciascuno può trovare maniere nuove, diverse e interessanti per ottenere risultati conosciuti. Inutile dire che lo studio approfondito di una (bella) programmazione professionale può risultare molto utile durante la normale procedura di apprendimento.
Ultima raccomandazione: tutto il contenuto dell’ensemble Junatik – normalmente disponibile nel pacchetto Reaktor – è stato “riarrangiato graficamente” cercando di ottimizzare il flusso grafico dei dati da sinistra verso destra; è solo un artificio cosmetico; il valore della programmazione è quello originale e solo l’aspetto visivo dei singoli contenuti risulterà differente dallo standard.

Junatik si ispira al funzionamento del vecchio Roland Juno 6/60, con l’aggiunta di una nutrita sezione effetti (incorporata per quello che riguarda chorus, distorsione, equalizzazione ed esterna per l’Instrument dedicato allo stereo delay). Il suo pannello comandi è piacevolmente chiaro nella disposizione adottata.

A titolo d’informazione, facciamo notare come, agendo nella Ensemble Structure Window, sia possibile inibire selettivamente la visualizzazione del logo Reaktor Library (oggetto Badge), della grafica differenziata per i diversi blocchi funzionali (oggetto Picture), dei crediti (oggetto Credits).

di Enrico Cosimi

L’Ensemble contiene due Instrument separati: il sintetizzatore Junatik vero e proprio più lo Stereo TDelay collegato direttamente sull’uscita del primo. La struttura dell’Ensemble è facilmente verificabile nell’illustrazione seguente.

 

 

La struttura di JunatikIstruttiva, da questo punto di vista, l’analisi della Ensemble Structure Window, con la serie delle Macro che contengono i diversi blocchi circuitali.

 

 

Da sinistra verso destra, è possibile riconoscere le diverse Macro:

  • MIDI In: gestisce i dati Pitch e Gate desunti dalla porta MIDI ed a questi offre, in parallelo, la possibilità di sommare eventuali codici esterni di controllo, utili ad esempio per mettere sotto step sequencer l’intero Instrument.
  • Vel: abilita o disabilita la MIDI Key Velocity al controllo degli inviluppi interni.
  • Env: contiene il generatore d’inviluppo ADSR utilizzato in diverse parti del sintetizzatore (ulteriori particolari in seguito).
  • ST Gate: risagoma il segnale di Gate ricevuto dal MIDI, preparandolo al successivo impiego per la sincronizzazione del LFO.
  • LFO: produce la modulazione ciclica a bassa frequenza per l’oscillatore, la simmetria dell’onda quadra e la frequenza di taglio del filtro.
  • VCO: contiene tutti i moduli necessari alla generazione audio simultanea delle diverse forme d’onda.
  • VCF: contiene tutti i moduli necessari alla produzione del filtro passa basso a quattro stadi.
  • VCA: contiene tutti i moduli necessari alla gestione dell’ampiezza di segnale.
  • HPF: contiene il filtraggio passa alto non dinamico.
  • EQ: contiene i tre tagli d’equalizzazione.
  • Distortion: contiene i moduli che producono la saturazione del segnale.
  • Chorus: contiene i moduli necessari allo sdoppiamento modulato della linea d’uscita.
Di seguito, la descrizione funzionale delle diverse Macro.

Macro MIDI In

I segnali di controllo ricevuti dalla porta MIDI (Note Pitch e Gate) vengono messi in Merge (cioè miscelati tramite coppia di moduli Event Processing/Merger) con eventuali codici omologhi ricevuti alle due porte P e G previste dalla Macro.

I segnali così miscelati vengono puliti da eventuali imprecisioni mediante coppia di moduli Event Processing/StepFilter (in pratica, il segnale passa solamente se è maggiore/minore del valore di tolleranza specificato alla porta Tol – che in questo caso è zero).

Il segnale di Gate così purificato è direttamente inviato in uscita alla porta G della macro.

Il segnale di Pitch confluisce in un punto di somma (modulo Math/Add) insieme al valore della regolazione di pannello Tune (range +/-un semitono) ed alla selezione di un offset -12/+12 utile per definire l’eventuale trasposizione (selettore Octave).  La somma di questi controlli è emessa sulla porta Cut della Macro e successivamente indirizzata al controllo della frequenza di taglio del filtro.

Parallelamente, la stessa somma di controllo NotePitch + Tune + Transpose viene sommata (ennesimo modulo Math/Add) al prodotto (modulo Math/Mult) del controllo di pannello VCO (slider con range pari a 8 semitoni) per il valore di MIDI PitchBend ricevuto dall’esterno.  Alla porta P della Macro è quindi presente il segnale di controllo frutto della seguente combinazione: (NotePitch + Tune + Transpose) + (PitchBend * VCO Range).

Un ultimo controllo di pannello VCF (slider con range pari a 48 semitoni) fornisce il segnale di controllo sulla porta d’uscita VCF che, successivamente, verrà utilizzato per scalare (tramite moltiplicazione) il controllo sulla cutoff frequency da parte del Pitch Bend.

Macro ST Gate

Estrae, dal codice di controllo MIDI Gate un segnale di controllo monofonico (si noti il led arancione nel modulo AtoG) che successivamente verrà utilizzato per le subordinazioni di sincronizzazione del LFO.

Il MIDI Gate viene ricevuto dal Voice Combiner (che lo rende adatto alla successiva gestione in monofonia) e presentato all’ingresso del modulo Auxiliary/A to G. Quest’ultimo, applica il valore A (in questo caso, una costante pari a 1) ogni volta che il segnale di trigger in ingresso presenta un fronte positivo e lo riporta a valore zero in corrispondenza di un fronte negativo. Il risultato dell’operazione è presentato alla porta d’uscita G.

 

 

Macro LFO

L’oscillatore a bassa frequenza vero e proprio è solo quello in basso a destra nella Macro, la cui onda triangolare è emessa dalla porta d’uscita LnD: tutto il resto della struttura serve per generare i comportamenti addizionali di Initial Delay e di visualizzazione in modalità oscilloscopio.

La frequenza del modulo LFO è governata mediante prodotto del controllo di pannello Rate (range pari a 0,14/1.3 Hz, sottoposto a conversione logaritmica mediante modulo Math/LogA) per una costante 6.4;  successivamente il prodotto è convertito (modulo Math/ExpF) da valori logaritmici – semitoni – a valori linear – frequenza in Hz ed inviato alla porta di controllo F del modulo.  L’ampiezza del LFO è definita con una costante 0.5. Il segnale generato dal LFO è inviato a tre diverse destinazioni:

  • L’uscita vera e propria LnD della Macro, per i successivi impieghi nel VCO.
  • L’ingresso Y del modulo Panel/XY Control (usato come oscilloscopio), previo addolcimento con modulo Auxiliary/Audio Smoother. Ricordiamo che il pennello elettronico dell’oscilloscopio è controllato dal segnale presente all’ingresso X, generato da un apposito Ramp Oscillator governato in ampiezza da costante 1 e mandato a velocità clock di sistema ottenuta mediante modulo Auxiliary/Tempo Info, che emette la frequenza in Hz pari ai Beat per Second.
  • L’uscita L-D, sottoposta a moltiplicazione per il profilo d’inviluppo necessario alla creazione del Delay iniziale (ulteriori particolari in seguito).

Particolarmente articolata è la struttura messa in piedi per gestire, dall’interpretazione del Gate G di tastiera, i comandi di controllo d’ampiezza e Initial Delay sull’ampiezza di modulazione.

I valori superiori ed inferiori a 0 del Gate, (ottenuti mediante comparazione/separazione nel modulo Event Processing/Separator sono miscelati mediante modulo Event Processing/Merge ed inviati al modulo Delay/Single Delay (tempo massimo pari a 1 secondo) che produce il ritardo necessario all’apertura della porta L-D. Il Delay Time è regolato mediante il prodotto tra il valore del controllo di pannello Delay (range 20/71) e la costante 0.88. Il prodotto è convertito in valori esponenziali tramite modulo Math/ExponA e reso quindi adatto alla connessione con la porta D del Delay.

Solo se l’uscita del Delay è maggiore di 0 (condizione ottenuta mediante un secondo modulo Event Processing/Separator), viene miscelata con lo stato Low del precedente Separator e, dopo un’ulteriore pulizia con Event Processing/Step Filter, è inviata all’ingresso di Gate G del modulo Envelope/AR-Env che sagoma l’ampiezza d’uscita sulla porta L-D.

In alternativa al Gate MIDI, con apposito selettore MIDI di pannello, si può innescare l’inviluppo AR mediante tasto di pannello LFO Trig (che viene utilizzato anche per risincronizzare il Ramp Oscillator che pilota l’oscilloscopio).

 

 

Macro Vel

Permette di selezionare il normale transito del MIDI Gate (che, lo ricordiamo, in Reaktor contiene anche un’informazione di Key Velocity embedded) o, in alternativa selezionabile dall’utente, un Gate di ampiezza costante pari a 1 ed indifferente alle variazioni di Key Velocity.

Il MIDI Gate è presentato ad un Event Processing/Separator che trasmette le due uscite Hi e Low ad altrettanti moduli Event Processing/Merge e, da questi, ai selettori On/Off sulle porte Env e Gat(e). Il percorso verso quest’ultima comprende un Event Processing/Value che, in logica Latch, sovrappone la costante 1 all’impulso Hi ricevuto al suo ingresso.

In questo modo, ogni volta che il Gate cambia di stato, con un fronte positivo, la lettura Hi è convertita in costante latched 1 resa disponibile alle due posizioni Off degli switch di selezione; il segnale originale del Gate è inviato alle porte di uscita se i selettori vengono messi in posizione On.

Macro Env

Genera il comportamento ADSR identificato sul pannello come Mod. Envelope e, tramite porta d’uscita Env, collegato agli ingressi corrispondenti su VCO (come una delle tre sorgenti PWM), VCF (per il controllo della Cutoff Frequency) e VCA (per il controllo d’ampiezza).

Il canonico modulo Envelope/ADSR-Env è messo sotto controllo di quattro regolazioni di pannello Attack, Decay, Sustain e Release (tutti con range 0/1 e stepsize ridottissima); per curvare adeguatamente i comportamenti dei tre tempi A, D e R, sono stati instanziati tre moduli Event Processing/Control Shaper 2, che permettono di di “equalizzare” l’andamento del valore A, D, R facendolo deviare dalla linearità originale. A questo scopo, sono presenti quattro generatori di costante che impostano i valori -5, 39, 57 e 71 rispettivamente in corrispondenza delle percentuali 0, 33, 66 e 100% del controllo in transito.

 

 

Macro VCO

Contiene due macro di oscillatore vere e proprie (Oscillator e Three Saws), circondate da un’articolata struttura per il controllo dell’intonazione, della simmetria dell’onda quadra, del vibrato e, tramite macro Display, della visualizzazione in stile oscilloscopio.

La gestione della simmetria PWM è subordinata alla selezione di sorgente, operata mediante switch a tre posizioni PWM che è collegato alla porta W della sub Macro Oscillator; in questo, confluiscono tre segnali di controllo indipendenti:

  • Il valore Manual del controllo di pannello omonimo.
  • Il prodotto del valore Manual moltiplicato per il segnale Env ricevuto dalla porta d’ingresso omonima.
  • La somma, moltiplicata per il valore PWM, del segnale LnD (ovvero del LFO non sottoposto all’Initial Delay) invertito in polarità (modulo Math/Invert) ed una costante 0.5.

L’intonazione è gestita dal segnale presente alla porta P, cui viene sommato il valore del controllo di pannello Vibrato, moltiplicato per il segnale LFO subordinato all’Initial Delay (L-D); il risultato è collegato alle tre porte d’ingresso P delle Macro Oscillator, Three Saws e Display.

Il segnale elaborato dagli oscillatori confluisce sulla porta d’uscita Out. Uno switch On permette di disabilitare individualmente l’intero segnale della Macro Three Saws (anticipiamo che, all’interno dell’altra Macro Oscillator, ciascuna forma d’onda sfrutta un On/Off indipendente).

Sub Macro Osc

Contiene, realizzati in maniera abbastanza dispendiosa tutti i comportamenti timbrici necessari alla generazione di onda Sawtooth, Pulse, Sub Osc/Pulse e Noise. In ciascuno dei casi, è instanziato un modulo vero e proprio che è accomunato, quando necessario, dalla gestione P e W, rispettivamente per l’intonazione e per la simmetria dell’onda quadra.

La suboscillazione all’ottava inferiore è ottenuta sommando (anzi, sottraendo) al valore P una costante -12.

Il filtraggio del Noise è ottenuto con un Lo Shelf EQ accordato a 100 Hz e caricato a 24 dB di enfatizzazione (costanti 100 e 24, rispettivamente collegate alle porte P e B).

La somma dei quattro segnali è convogliata alla porta Out.

Sub Macro Three Saws

Ancora più costosa l’implementazione della Triple Saw Wave: invece di utilizzare la comparazione di una dente di sega per un valore variabile, sono stati instanziati tre moduli Sawtooth opportunamente fatti deviare in intonazione mediante presenza simultanea del valore Detune con andamento normale ed invertito (modulo Math/Inverter). Il livello dei tre oscillatori è subordinato al valore del controllo ricevuto alla porta A.

 

 

Sub Macro Display

Il modulo XY viene utilizzato in modalità oscilloscopio:

  • La porta Y1 riceve il segnale audio da analizzare, alla porta In, e direttamente prodotto dalla somma delle diverse forme d’onda;  tramite modulo Auxiliary/From Voice, solo il segnale della voce numero 1 (specificata tramite costante 1 applicata alla porta V del modulo) viene preso in considerazione per l’analisi grafica.
  • La porta X1 riceve la frequenza necessaria a garantire lo spostamento costante lungo l’asse di visualizzazione orizzontale. A questo scopo, è previsto un Ramp Oscillator che, con un secondo modulo Auxiliary/From Voice uniforma la sua intonazione alla frequenza della voce presa in esame.
La prossima volta, affronteremo la struttura relativa al filtro… e a tutto il resto.
Stay tuned.

 

 

Tags: , , , ,

Trackback from your site.

Comments (7)

  • Lettore pigro

    |

    Ottimo!!!
    Solo una domanda:
    “In questa programmazione, ci sono diverse scelte che possono sembrare discutibili, costose o semplicemente personali”. Intendi in termini di risorse hw richieste (il che non mi sembra), oppure per il processo di sintesi ad esempio del sub macro OSC?

    Reply

    • Enrico Cosimi

      |

      un poco tutte e due le cose: con RKT, e più in largo con qualsiasi linguaggio di programmazione per oggetti, si possono ottenere gli stessi risultati percorrendo strade diverse.
      Holzamer, che è MILIONI di volte più bravo del sottoscritto e del quale ho studiato questa ensemble in reverse engineering, molto spesso percorre strade più costose dal punto di vista dei moduli utilizzati di quelle che avrei scelto io o che, a lume di naso, potrebbero sembrare quelle ideali.
      Il mio è un discorso molto discutibile, per carità, ma tanto nei confronti della triple saw, quanto – lo vedremo la prossima volta – a proposito del filtro fatto con determinati moduli, nei miei limiti avrei detto “va beh, qui prendiamo una scorciatoia e buonasera)… :-)

      Però, se ci pensi, questo è il bello di Reaktor: studiando le programmazioni degli altri, impari cose che non ti sarebbero venute in mente “alla prima botta”…

      Reply

  • Lorenzo

    |

    Impressionante…
    O_O

    Reply

    • Enrico Cosimi

      |

      …come affacciarsi su un abisso senza fondo…

      Reply

  • Lettore pigro

    |

    Una domanda fuori tema ma non troppo: perchè un modulare analogico oggi? Mi pongo seriamente questa domanda “tardivamente” ovvero al terzo pannello eurorack..
    In questa fase sto aprendo gli occhi grazie al tuo manuale e al corso di Kuit e siamo solo in ambiente Clavia; mettiamoci anche reaktor, tassman, Max Msp e quello che NON voglio sentirti pronunciare e mi chiedo se con tutto sto ben di dio in digitale valga ancora la pena di perseguire questa strada del Eurorack. Fra il resto come ovvio qualche modulo si è impiantato e le riparazioni sono con tempi di attesa da cambio di tecnologia..
    Non sarà che mi sto muovendo in un campo scivoloso dove il sentire è solo in funzione di capire? Perchè allora è meglio che mi iscrivo ad un corso di filosofia.
    La calura…

    Reply

  • Enrico Cosimi

    |

    eh eh, la calura non c’entra…
    certe cose – specie con il modulare – sono ancora più pratiche se fatte in hardware, perlomeno come velocità di realizzazione; sembra una sciocchezza, ma dover lavorare in punta di mouse ti porta a disperdere in un’infinità di passaggi quello che su un modulare anche di dimensioni medio piccole puoi gestire con dieci dita, o magari con due mani simultaneamente (per essere realistici); oltre al fatto che – rotture a parte – per molti versi l’hardware è più affidabile e non crasha quasi mai – magari, come i miei vecchi cabinet doepfer – può andare in fumo l’alimentazione, ma c’è un livello generale di affidabilità più sicuro.

    poi, si sa, gli innamorati sono sempre un poco ridicoli quando cercano di spiegare il perchè di certe cose…

    ovvio che, realisticamente, se la ripetibilità dei risultati, la memorizzazione e la polifonia sono punti fondamentali… beh, non c’è hardware che tenga :-)

    Reply

  • Lettore pigro

    |

    Grazie, molto diplomatico anche il paragone con le questioni di cuore..

    Reply

Leave a comment

Inserisci il numero mancante: *