Iniziare progetto synth

Ciao a tutti, è da un pò che sto cercando di imparare qualcosa di elettronica e di programmazione. Mi sono interessato ad Arduino per quanto riguarda lo sviluppo di synth, ho visto ad esempio un progetto di nome auduino sul web ma ce ne sono anche altri. Vorrei cominciare a imparare qualcosa di questo hardware iniziando un progetto di questo tipo. C'è qualcuno che riesce a spiegarmi come cominciare, su cosa mi devo concentrare e come funzionano nella pratica (sia parte hardware che software) progetti tipo quello di cui parlavo prima? Ringrazio chiunque mi risponda, ogni consiglio è gradito

Così in 2 righe non è facile riassumere il tutto.
Si tratta di usare i timer e gli interrupt per generare le forme d'onda che desideri riprodurre nonché gli effetti.

Ti suggerisco anche di cercare in rete il progetto Nebulophone, è molto ben fatto, forse uno dei più completi. E c'è il sorgente del firmware nonché gli schemi per riprodurlo. Anch'io recentemente mi ero interessato alla cosa, volevo provare a riprodurre proprio il Nebulophone.

Ciao a tutti, grazie leo 72 per il consiglio, ho dato un'occhiata al progetto di cui mi hai parlato ma a conoscenze sono ancora indietro e faccio fatica a capire il progetto.
Sto comunque continuando a documentarmi il più possibile.
Volevo chiedere alcune cose:
-come si ottiene su arduino il segnale audio? c'è un convertitore? di che tipo?
-come si generano forme d'onda? (chiedo "solo" la spiegazione del concetto a parole, non codici o schemi hardware)
-volevo iniziare a provare nella pratica arduino per iniziare ad imparare qualcosa. Potrebbe essermi utile un arduino uno + un kit workshop o starter kit? oppure è più utile qualcosa di più specifico per quello che mi piacerebbe fare ossia arduino per la creazione delle varie componenti di un synth? sono ben accetti consigli
scusatemi se ho detto inesattezze, grazie a chiunque mi risponda

hei, il progettino mi sembra interessante... volendo ti posso dare qualche dritta. :slight_smile:

Come nei vecchi synth anni 70/80, parlo dei synth analogici monofonici, stile moog, devi iniziare con il crearti attraverso l'uso dei timer e dei pwm i vari moduli hardware che lo compongono:
VCO : voltage controlled oscillator
VCA : voltage controlled amplifier
VCF : voltage controlled filter
ADSR : attack, decay, sustain e relaise

questi sono i moduli essenziali per realizzare con un micro un synth-analogico.
chiaramente nel nostro caso non parleremo di "Voltage controlled" ma di "Digital controlled" e quindi gli acronimi diventeranno:

DCO, DCA, DCF, ADSR, LFO, Ring-modulator etc.

Ti consiglio di iniziare con la realizzazione della parte DCO (oscillatore) che deve essere in grado di produrre un pò di forme d'onda:
quadra, triangolare, sinusoidale, a rampa e perchè no, anche forme d'onda generate attraverso una wave-table (DDS) inserita sulla flash del micro o su sd-card esterna (tipo campionatore).
Inoltre vorrai pilotare il tuo synth attraverso una tastiera midi e quindi dovrai interpretare i segnali seriali (MIDI) a loop di corrente che arrivano attraverso un opto-isolatore all'ingresso seriale del micro.
corrispondentemente devi modificare la frequenza di riproduzione in base alla nota (tasto) premuta sulla tastiera etc etc .... creandoti una tabella di riferimento.

L'implementazione di alcuni di questi moduli risulta essere molto complicata se affidata solo ed esclusivamente al uC, perciò risulta convenevole realizzare almeno il VCF in modo analogico magari con un chip tipo SSM2044. Questo perchè una volta generato il segnale DCO 8/16 bit in PWM o con un DAC esterno non si ha abbastanza potenza di calcolo (programmando in C) per affidare al uC il compito di filtrare in cut-off il segnale di uscita. Avresti qualche speranza di fare tutto con il uC programmandolo in assembly.

continuerò.............. se la cosa interessa. :slight_smile:

Mi accodo anche io a questa discussione perché sarei interessato e comunque lo trovo un progetto molto interessante :slight_smile:
Si riescono ad ottenere le varie forme d'onda - o qualcosa di simile - solo con Arduino o è necessario un DAC?

Ciao
Luca

La generazione delle onde si fa con i timer in modalità PWM così da avere dei generatori di segnale precisi ed indipendenti dal codice.

Il problema è la successiva conversione da segnale PWM, quindi simil-analogico, in vero segnale PWM.
Il Nebulophone aggira questo ostacolo mediante l'uso di un operazionale pilotato dal segnale PWM stesso. In questo modo all'uscita dell'operazionale si avrà un vero segnale analogico da amplificare tramite circuitino oppure far entrare in un ingresso di un amplificatore audio tradizionale.

ciao ragazzi,
considerando un AVR lavori a 16Mhz, impostando il pwm con risoluzione di 8 bit (il minimo) , pre-scaler=1 si ottiena una freq di pwm pari a 31250 Hz.
adesso volendo realizzare un segnale a rampa-up tramite un generatore di inviluppo o una wave-table abbastanza risoluta (256 valori) otteniamo

31250 / 256 = 122,07 Hz che sarebbe la freq più alta (all'uscita del lowpass filter) in termini di nota musicale che possiamo ascoltare con questa risoluzione.

per generare una forma d'onda con freq musicale sulla armonica fondamentale pari a 440Hz (LA4) dobbiamo ridurre la risoluzione della rampa portandola a 71 livelli

31250 / 71 = 440,14 Hz

per avere la freq del LA6 pari a 1760 Hz dovviamo generare la rampa con soli 17 step senza considerare i cicli macchina che occorrono per prelevare i dati dalla tabella
ed assegnarli al registro pwm.

dico bene? e allora vi chiederete...........ma è possibile realizzare il synth sfruttando come uscita audio l'OC del PWM?

Ok, quindi il segnale che produco da arduino è sempre un PWM che utilizzo per ottenere il vero analogico. Allora comincerò a studiarmi sul datasheet i timer così ci posso capire qualcosa di più :slight_smile:
La conversione con AmpOp la fai con un integratore?

hai letto sopra?

se vuoi realizzare un sintetizzatore con tanto di filtri digitali controllati digitalmente (DCF) ti consiglio di passare all' Arduino2560 (almeno) e gestire attraverso le porte parallele un DAC a 16 bit che potresti realizzare facilmente con dei registri e una rete resistiva di precisione + operazionale.

Un consiglio personale ! lascia perdere il PWM per questa applicazione, avresti solo una grande delusione in termini di qualità del suono,
hai presente i giocattolini cinesi che emettono suoni? sono fatti così, non avresti quello che in gergo musicale si chiama "calore" del suono analogico.

cmq, abbassando la risoluzione della wave portandola a 4 bit (16 livelli) forse ti potresti accontentare.... dipende dalla qualità che desideri e da come configuri il DDS.

altra soluzione sarebbe quella di utilizzare la modulazione ad un bit o sigma-delta che potrebbe aumentare la qualità.

iniziamo intanto con il calcolare la freq della nota che deve essere generata in base al tasto premuto sulla tastiera midi:

Freq = 440Hz * 2^((n-69+d)/12)
dove
         n = MIDI note number
         d = transpose/detune (in halftones)
considerando es: 

LA6 midi-note = 96
e transpose=0

abbiamo
(93-69+0)/12=24/12=2

frq=440 * 2^2 = 1760Hz .... esatto

fate la prova con altre note

a questo punto considerando di voler generare una forma d'onda costituita da 16 livelli (4bit di risoluzione)
per ottenere un suono con una forma a rampa con questa risoluzione dobbiamo moltiplicare 1760 x 16 ed otteniamo 28160 Hz.
Questa è la freq con cui dobbiamo prelevare i dati dalla wave-table ed inviarli in uscita per ottenere una nota LA6 con forma d'onda a rampa.

chiaro?
ciao

Ah no, non avevo letto il tuo post...
Personalmente vorrei provare a fare qualcosa con arduino uno (perchè ho quello a casa e non vorrei passare ad altra board o micro in stand-alone). Più che altro il mio è uno sfizio e un modo per divertirmi con arduino, perchè ho già dei synth analogici e digitali coi quali suono :slight_smile:
Ho capito il problema...Vedendo che il discorso è così complesso - per quello che interessa me - potrei anche solo fare una cosa più semplice, senza troppi fronzoli. Una sola forma d'onda: quadra...

Grazie x le vostre risposte sempre rapide ed esaustive,
Luca

Scusami tanto, non volevo scoraggiarti, anzi visto che ho sufficiente esperienza in merito mi sarebbe piaciuto condividerla con voi
al fine di realizzare un bel progettino....... con l'arduino (che fa pure rima) :slight_smile:

ti posso chiedere quali synth possiedi ?
sono vintage, moderni o cloni-autocostruiti.

Parliamo di Paia / Moog quella serie lì o altro.

ciao

Ciao a tutti!
spiego meglio: io non sono esperto in materia ma, anche se mi risulta difficile, sto cercando di capirne qualcosa. Credo sia corretto rivolgermi al forum solo per cose che mi riultano "impossibili" da capire in altro modo per questo cerco di cavarmela da solo e quando mi date qualche dritta che non capisco vado a leggermi parecchi tutorial a riguardo per cercare di cavarne qualcosina.
Detto questo, non avendo la possibilità di "progettare a mente" per intero un progetto come questo mi piacerebbe, sperando sia possibile, procedere step by step (aspettando chiunque segua il progetto) dall'inizio risolvendo i problemi che si presentano nel mezzo, in modo da creare una specie di linea guida ordinata per realizzare un progetto comune (che sarebbero le componenti più "indispensabili" di un synth) alla portata anche di inesperti motivati come me!:slight_smile: magari soffermandosi ognitanto su qualche implementazione proposta da chiunque voglia. Mi piacerebbe partire dalla creazione delle forme d'onda più classiche come sinusoide, triangolare, saw e quadra. Per questo motivo traendo spunto dai suggerimenti stavo cercando di studiarmi gli argomenti: timer, interrupt e pwm.
Da un commento precedente però sembrava il pwm non generare una qualità del suono "importante". A questo proposito cyclone parlava di DAC a 16 bit (andrò a leggere a riguardo!)..Pensate sia possibile un progetto simile? scusate se ho detto inesattezze! ciao a tutti!

@cyclone:
che esperienze hai? sono curioso :wink:

PS:
se è per una questione di pin, non è necessario comprarsi una MEGA. Basta spendere 5/6 euri e prendersi un Atmega644: è un comodo formato DIP40, per cui si hanno ben più dei 16 pin da dedicare ad una comunicazione parallela verso un DAC esterno. Inoltre ci sono diversi core funzionanti per questo micro (compreso quello che ho preparato io tempo fa) per poter gestire il micro tramite l'IDE di Arduino. Si potrebbe procedere su questa strada.

No, no, per realizzare quello che vi stavo suggerendo un Atmega644 non basta (o siamo troppo tirati) e vi dico il perchè.

abbiamo 4 porte di 8 bit ok?

consideriamo una porta e mezza, diciamo quasi 2 per pilotare un LCD grafico tipo KS108 (qualcosina su parametri devi poterla leggere)
una porta ADC per leggere valori provenienti dai potenziometri principali per gestire un controllo live tipo Cut-off, risonanza e qualche altro
una porta da dedicare ad una matrice di 16 pulsanti per impostazione e memorizzazione parametri digitali (DCO, DCF, DCA e sopratutto ADSR, LFO rate, Noise ed altri ancora)
una porta per far uscire i dati audio PCM + una porta per gestire i segnali di controllo per la scrittura su registri esterni per il DAC.

A quanto siamo ? 16LCD + 8ADC + 8puls + 16data&control-flow = circa 48 .. magari ne possiamo togliere qualcuno ma siamo al limite e dove mettiamo i segnali per il midi, l'interfaccia SPI per mettere su una SD-card formattata FAT con i campioni PCM e qualcosina ancora?
Quando vi capiterà di realizzare un progetto in fase prototipale iniziale "futuribilmente" espandibile è bene stimare a priori un utilizzo del 50% delle capacià massime del micro senò dopo sono _azzi.

PS. Per questo motivo Vi avevo indicato il 2560 solo per comodità realizzativa (Visto che il micro è gia assemblato) se volete realizzare qualcosa da fare invidia ai prodotti professionali e poi con i 64K credo che non saremmo in grado di gestire l'ammontare di carico computazionale che il micro deve macinare.
Non vi dico di passare alla serie Xmega o ai nuovi Cortex-M4 ma almeno cavolino espandiamo the know-how con quelli che conosciamo e che possiamo usare!

ciao

Sì capisco.
Però si possono ridurre i pin facendo un sistema multimicro, ad esempio delegando un Atmega168 al pilotaggio del display, ed un Attiny84 alla gestione della tastierina. E comunicando con essi via seriale o I2C.

Perché ti dico questo? Primo, per contenere i costi (comprare 3 chip da mettere in standalone comporta spendere una decina d'euri contro i 50 che costa la MEGA). Secondo, per fare un sistema DIY facile da assemblare a livello amatoriale su una schedina 1000fori. :sweat_smile: $)

marooooo ma perchè bisogna complicare la vita...
sai cosa significa fare un sistema multiprocessore? quando con un solo chip puoi fare tutto?
sincronizzare, schedulare, flaggare, frame-ntare, wait-states-syncronization, quelle più semplici.......

non ne vedo la necessità... almeno in questo progetto io ci vedo un solo micro che da solo può benissimo fare tutto.

ricordati che: "le cose semplici sono le più difficili a rompersi" e questo vale anche in elettronica.
Infatti se pensate al robot Curiosity appena sbarcato su marte potremmo pensare che per farlo funzionare chissà quanti processori e di che tipo ci stanno per gestire l'intero sistema di controllo....

Pensate che il micro montato su Spirit ed Opportunity arrivava a soli 35MIPS ...... quasi come un Arduino2560 :)(unica differenza ? 32-bit Radiation Harneded)
e ancora prima nel 1996 sul Mars Pathfinder Rover - Sojourner a controllare il robottino ci stava un solo 8085 da 100KIPS..... bei tempi quelli

ciao

Vedute diverse, non te la prendere :wink:
Solo che vedo i 50€ della MEGA contro la disponibilità di chip vari che ho a casa lì ad aspettare che li usi e penso a come fare la cosa in modo "alternativo" $)

Hei,
ok se hai a casa tutti quei chip allora procedi come vuoi... :stuck_out_tongue:

ma io li venderei tutti su ebay e comprerei allora una bella schedina, magari in _ina con su una bella FPGA Stratix V, Arria GX da 1152 pin
o magari un bel Hardcopy così da instanziarci non meno di 50/100 cpu con core avr e collegarli tutti insieme per creare un hard-multitasking-SOC. :slight_smile:

No no... i chip mi servono per i vari progetti :wink:

leo,
non capisco una cosa.... che succede in molti forum che mi capita di frequentare (durante i gg di duro lavoro come adesso)

c'è qualcuno che apre un topic... poi qualcun altro inizia a scriverci dentro... magari aggiungendo suggerimenti, sconsigli o scazzature :slight_smile:
ad un certo punto chi aveva aperto disappear dalla circolazione e si rimane da soli a cazzoleggiare su altro.... che ne pensi?