Creazione di toni musicali con un buzzer

allora è meglio la mp3 shield di sparkfun SparkFun MP3 Player Shield - DEV-12660 - SparkFun Electronics :sweat_smile:

non si può sentire!

mi piacerebbe approfondire questa questione molto interessante, mi chiedo come facevano con il furby a emettere suoni se aveva un cpu piu arcaica di questa.

mi piacerebbe approfondire questa questione molto interessante, mi chiedo come facevano con il furby a emettere suoni se aveva un cpu piu arcaica di questa.

Ciao Pietro, secondo me con un po di ingegno si riesce a tirare fuori qualcosa da arduino,tu pensi di no?

Mi riferisco a fargli fare dei suoni..

secondo me si, io credo che prima di capire come leggere un mp3 si dovrebbe capire meglio come leggere un midi che un buzzer può emettere perfettamente... con un po di ingegno qualcosa si riesce a fare anche senza usare altri parti aggiuntive ci sarà da divertirsi...

secondo me si, io credo che prima di capire come leggere un mp3 si dovrebbe capire meglio come leggere un midi che un buzzer può emettere perfettamente... con un po di ingegno qualcosa si riesce a fare anche senza usare altri parti aggiuntive ci sarà da divertirsi...

Io di midi non ne capisco....ma mi sarebbe piaciuto riuscire a campionare delle frasi, so che c'è qualcosa in merito ma volevo una soluzione diversa mia e con un risultato migliore. Partendo da un'onda quadra con il duty cicle del 50% ( che è ciò che arduino tira fuori usando la funzione tone() ) e passando per due circuiti integratori si dovrebbe ottenere una sinusoide....
Se si usano più uscite ( tone() ) e si mixano insieme (dopo i rispettivi integratori) si riesce a ricostruire meglio un segnale vocale, mancherebbe ancora qualcosa che gestisca l'ampiezza delle singole uscite.......In questo modo riusciamo ad avere anche le armoniche...
Che ne pensi ?

ecco io parlavo di questo:http://hlt.media.mit.edu/?p=1963
eisste un programam che dato il file audio lo coverte in array; un esempio èEncodeAudio-windows ma se non mi sbagio non fuzioanbene

Scusate se mi intrometto nella discussione, che a quanto pare si è ormai allontanata dall'argomento "toni musicali con buzzer".
Torno sull'argomento perchè questa cosa di toni e buzzer mi ha fatto ricordare un progettino che avevo iniziato per studiare i timer mesi addietro e poi ho abbandonato.
Si trattava di far suonare delle note ad un ATtiny84 tramite il classico sistema a stringa "C=Do, D=Re, etc" ma aggiungendo degli "effetti" semplici gestiti in tempo reale dai timer. In particolare ero arrivato a questo punto.

  • Timer1 (16 bit) in FAST PWM dedicato a "suonare" le note direttamente sul pin OC1A (scelto a 16 bit per avere maggiore accuratezza nell'estensione della frequenza
    -Timer 0 (8 bit) modo CTC per elaborare gli effetti.

Gli effetti che avevo scritto erano:
a) Vibrato (regolabile in velocità ed estensione)
b) SWEEP, ovvero passaggio graduale da una nota a un'altra
c) Tremolo, ogni nota è alternata con la sua ottava superiore
d) Arpeggio, si possono preimpostare arpeggi di qualunque tipo e farli suonare specificando una singola nota.

Vi allego degli esempi audio per provare i vari effetti.
L'audio è registrato in modo "grezzo" collegando un piccolo altoparlantino tramite una R da 220 direttamente al pin 7 (OCRA) di un attiny84.
Il problema di farlo con un ATtiny non è tanto la scarsità di memoria Flash, quanto quella RAM (che così è praticamente finita)...in effetti molto è scritto solo per decodificare i comandi e ottenere un editor flessibile. Avevo già iniziato a usare 2 Timer da 16bit su un 1284 per fare un coppia di voci...poi ho lasciato perdere.
Se a qualcuno interessa continuare da qui, sono bel lieto di postare il lavoro fatto fin qui.

StarWars_tremolo.mp3 (169 KB)

XFile_vibrato_sweep.mp3 (545 KB)

Test_arpeggio.mp3 (536 KB)

Ciao dalubar ho sentito i file ....ne hai scritti di C,D ecc !! :fearful:
A parte gli scherzi è interessante ,il mio problema è che devo ancora masticare bene arduino , tu credi si possa fare una specie di sintetizzatore vocale senza utilizzare integrati tipo sparkfun (ora non mi ricordo il nome ma se non erro era qualcosa di simile) ??

Ciao dalubar ho sentito i file ....ne hai scritti di C,D ecc !! :fearful:
A parte gli scherzi è interessante ,il mio problema è che devo ancora masticare bene arduino , tu credi si possa fare una specie di sintetizzatore vocale senza utilizzare integrati tipo sparkfun (ora non mi ricordo il nome ma se non erro era qualcosa di simile) ??

Ah, ah...e invece la cosa bella è proprio che ho scritto davvero poco, gli effetti "complicati" che senti sono realizzati in background e necessitano solo di semplici comandi, ad esempio la stringa per suonare StarWar è questa:

"StarWars:d=4,o=5,b=45: T1,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#6";

Quel T1 che vedi serve proprio per "accedere" il tremolo e poi il programma fa il resto, la stessa cosa vale prer gli altri effetti.

Per rispondere alla tua domanda, a mio modesto parere se non "mastichi" ancora bene Arduino allora direi che la scrittura di un sintetizzatore vocale è decisamente da sconsigliare. Io credo che fino a un certo limite (dettato principalmente dalla memoria e dal clock) non ci siano problemi a realizzare un piccolo synt vocale a bassa qualità, (ho anche visto degli esempi in rete), ma la domanda è: ne vale la pena? Direi che una MCU è, per attitudine naturale, destinata ad altro, magari sarebbe più opportuno fargli pilotare un synt esterno.

Per rispondere alla tua domanda, a mio modesto parere se non "mastichi" ancora bene Arduino allora direi che la scrittura di un sintetizzatore vocale è decisamente da sconsigliare. Io credo che fino a un certo limite (dettato principalmente dalla memoria e dal clock) non ci siano problemi a realizzare un piccolo synt vocale a bassa qualità, (ho anche visto degli esempi in rete), ma la domanda è: ne vale la pena? Direi che una MCU è, per attitudine naturale, destinata ad altro, magari sarebbe più opportuno fargli pilotare un synt esterno.

Consigli ed opinioni da chi ne sa di più sono sempre ben accetti :slight_smile:

Riguardo a quel codice riesci a spiegarmi di più (tempo tuo permettendo) ?

gia, bel lavoro; se puoi postare tutto, siamo tutti in ascolto :stuck_out_tongue_closed_eyes:

Beh, avevo trovato tempo fa un programma per tiny85 (ringtone) che suonava una melodia imposta tramite una stringa usando le note anglosassoni. Io ho ripreso quell'idea (riutilizzando e ampliando la parte di decodifica della stringa) e implementato il sistema di generazione delle note, che nel mio programma sfrutta la frequenza generata da un timer in modo molto simile a quello che usa Arduino per generare la frequenza di PWM (infatti la modalità si chiama FAST PWM con TOP limit). Parallelamente, un'altro timer è dedicato a processare i vari effetti in real time "modulando" (come nel caso del vibrato o dello sweep) in modo opportuno la frequenza di generazione della nota tramite una routine interrupt.

Al di là di queste descrizioni tecniche, in realtà avevo in mente di fare una piccola scatola musicale portatile "scacciapensieri", alimentata con una batteria da 9V, che si potesse suonare semplicemente agendo su una "pseudo-tastierina" ricavata tramite lo stesso circuito stampato e attivando gli effetti tramite dei piccoli switch e/o potenziometri con cui regolare la velocità o profondità del vibrato o sweep.
Seguendo questa idea non sarebbe più necessaria tutta la lunga parte relativa alla decodifica della stringa musicale, e si potrebbe lasciare più spazio RAM per altri effetti da implementare.

dalubar:
Beh, avevo trovato tempo fa un programma per tiny85 (ringtone) che suonava una melodia imposta tramite una stringa usando le note anglosassoni. Io ho ripreso quell'idea (riutilizzando e ampliando la parte di decodifica della stringa) e implementato il sistema di generazione delle note, che nel mio programma sfrutta la frequenza generata da un timer in modo molto simile a quello che usa Arduino per generare la frequenza di PWM (infatti la modalità si chiama FAST PWM con TOP limit). Parallelamente, un'altro timer è dedicato a processare i vari effetti in real time "modulando" (come nel caso del vibrato o dello sweep) in modo opportuno la frequenza di generazione della nota tramite una routine interrupt.

Al di là di queste descrizioni tecniche, in realtà avevo in mente di fare una piccola scatola musicale portatile "scacciapensieri", alimentata con una batteria da 9V, che si potesse suonare semplicemente agendo su una "pseudo-tastierina" ricavata tramite lo stesso circuito stampato e attivando gli effetti tramite dei piccoli switch e/o potenziometri con cui regolare la velocità o profondità del vibrato o sweep.
Seguendo questa idea non sarebbe più necessaria tutta la lunga parte relativa alla decodifica della stringa musicale, e si potrebbe lasciare più spazio RAM per altri effetti da implementare.

uan sorta di mini pianola? :slight_smile:

Beh, avevo trovato tempo fa un programma per tiny85 (ringtone) che suonava una melodia imposta tramite una stringa usando le note anglosassoni. Io ho ripreso quell'idea (riutilizzando e ampliando la parte di decodifica della stringa) e implementato il sistema di generazione delle note, che nel mio programma sfrutta la frequenza generata da un timer in modo molto simile a quello che usa Arduino per generare la frequenza di PWM (infatti la modalità si chiama FAST PWM con TOP limit). Parallelamente, un'altro timer è dedicato a processare i vari effetti in real time "modulando" (come nel caso del vibrato o dello sweep) in modo opportuno la frequenza di generazione della nota tramite una routine interrupt.

Al di là di queste descrizioni tecniche, in realtà avevo in mente di fare una piccola scatola musicale portatile "scacciapensieri", alimentata con una batteria da 9V, che si potesse suonare semplicemente agendo su una "pseudo-tastierina" ricavata tramite lo stesso circuito stampato e attivando gli effetti tramite dei piccoli switch e/o potenziometri con cui regolare la velocità o profondità del vibrato o sweep.
Seguendo questa idea non sarebbe più necessaria tutta la lunga parte relativa alla decodifica della stringa musicale, e si potrebbe lasciare più spazio RAM per altri effetti da implementare.

Be il concetto l'ho capito, siccome cercavo qualcosa di simile provo a cimentarmi . Volevo inserire in un progetto che sto ancora facendo (non mi manca molto ormai) una musichetta quella di Stargate ti metto il link (ci ho fatto un piccolo video)del mio lavoretto così capisci https://picasaweb.google.com/107718368268354247555/Filmati?authkey=Gv1sRgCMXD-L7qqrmF5gE#5762027946376146866
la volevo far suonare solo quando si apre..........

uan sorta di mini pianola? smiley

Si, esatto, un gadget da portare dietro per ingannare il tempo durante le code alla posta. :slight_smile:

Posto il codice.
E' destinato a un ATtiny84, anche se, con le opportune modifiche, potrebbe essere "portato" su qualunque MCU di caratteristiche pari o superiori (quindi un ATMega328).
Lo sketch è abbondantemente commentato, proprio in modo da non lasciare nessun dubbio a chi volesse continuare il lavoro :wink:
(Compilato con IDE 1.0 o 1.0.1, ma dovrebbe andare benissimo anche con gli IDE precedenti)

MUSICBOX_3.ino (20.6 KB)

Nota: a causa dell'elevato consumo di RAM (e non di FLASH) è possibile suonare solo melodie non lunghe; ad esempio la song "Vangelis" non verrà suonata perchè manda in overflow la RAM (anche se compila perfettamente), si potrebbe, invece, suonare perfettamente su una MCU più generosa in fatto di memoria.
Lasciato su tiny, quindi, è ideale solo nel concetto della "pianolina".
Se volete fare un concerto, invece, potete flasharlo cosi com'è su un ATMega1284 e allora...avete voglia di scrivere note :smiley:

Be il concetto l'ho capito, siccome cercavo qualcosa di simile provo a cimentarmi . Volevo inserire in un progetto che sto ancora facendo (non mi manca molto ormai) una musichetta quella di Stargate ti metto il link (ci ho fatto un piccolo video)del mio lavoretto così capisci https://picasaweb.google.com/107718368268354247555/Filmati?authkey=Gv1sRgCMXD-L7qqrmF5gE#5762027946376146866
la volevo far suonare solo quando si apre..........

Bellissimo...complimenti davvero.

Nota: a causa dell'elevato consumo di RAM (e non di FLASH) è possibile suonare solo melodie non lunghe; ad esempio la song "Vangelis" non verrà suonata perchè manda in overflow la RAM (anche se compila perfettamente), si potrebbe, invece, suonare perfettamente su una MCU più generosa in fatto di memoria.
Lasciato su tiny, quindi, è ideale solo nel concetto della "pianolina".
Se volete fare un concerto, invece, potete flasharlo cosi com'è su un ATMega1284 e allora...avete voglia di scrivere note

Quindi C D ecc.. Ok ,capito ,grazie.

probemino con compilazioe
MUSICBOX_3.cpp: In function 'void setup()':
MUSICBOX_3:70: error: 'DDRA' was not declared in this scope
MUSICBOX_3:70: error: 'DDA6' was not declared in this scope
MUSICBOX_3:70: error: 'DDA5' was not declared in this scope
MUSICBOX_3.cpp: In function 'void loop()':
MUSICBOX_3:473: error: 'PB1' was not declared in this scope