
MODALITA' GOD MODE
per Win 7 - GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}
Sperimentiamo:
Audio e Arduino


ARDUINO PARLA, CANTA E SUONA
~ grazie alla Pulse Code Modulation ~

Qualche informazione a riguardo:
In questa pagina metto a disposizione una libreria PCM
e un programma scritto in AutoIT per fare in modo
di poter riprodurre dei piccoli brani in formato WAVE con Arduino
attraverso un piccolo altoparlante collegato direttamente tra il pin 11 e GND.
La libreria PCM va utilizzata con Arduino e serve a generare l'audio
a partire da una serie di valori numerici, che vanno
da 0 a 255, memorizzati in un array di costanti char.
Creare un array da riprodurre come audio a partire da un file Wave
è un'operazione lunga e faticosa, ecco perchè con AutoIT ho creato
il programma di aiuto Wave_to_Arduino.exe, e intanto che c'ero
ho implementato la possibilità di creare anche il
sorgente COMPLETO, pronto da compilare.
La libreria l'ho modificata e ampliata partendo da un'idea
di David. A. Mellis, ho aggiunto una funzione più complessa
e sinceramente ora mi piace di più.
Ho anche aggiunto la possibilità di interrogare
lo stato del Player per ottimizzare le sincronizzazioni tra
audio diversi da riprodurre, in pratica ora possiamo far partire
un secondo audio immediatamente al termine del precedente.
Pensato per riprodurre brevi suoni/effetti alla
pressione di pulsanti o in risposta ad eventi.
Se vi interessano approfondimenti questo è
il link e qui ci sono ulteriori info a riguardo.
La libreria utilizza la modulazione PCM generata
mediante la periferica PWM di Arduino.
Guarda un tutorial sulla Pulse Code Modulation: link al video
Per suonare non necessita di nessuna interfaccia hardware,
serve solo un altoparlante e basta!
Questa libreria suona sfruttando l' INTERRUPT,
quindi mentre Arduino esegue il brano
si possono eseguire le normali operazioni di routine,
acquisire pulsanti, accendere leds,
scrivere su display, leggere sensori....
insomma, tutto quello che volete fargli fare.
Prestare molta attenzione a quelle istruzioni o librerie
che sfruttano il TIMER 2 in modo da non causare conflitti temporali
che potrebbero compromettere il corretto funzionamento del software.
Per dare la voce al vostro Arduino vi servono due programmi specifici
che potete scaricare e utilizzare immediatamente perchè non è richiesta
nessuna installazione, tranne che per la libreria PCM_8K-master.zip
Va aggiunta all'IDE di Arduino per poter compilare e creare un eseguibile.
scarica PCM_8K + Wave to Arduino 
è un file zip e contiene due cartelle:
Cartella 1: PCM_8K-master.zip
E' la libreria PCM da aggiungere alle librerie comuni di Arduino,
non mi dilungo perchè sapete già come fare...
ma se non ve lo ricordate guardate qui:
Cartella 2: Wave_to_Arduino.zip
Scompattatela dove volete, apritela e
fate doppio click sul file Wave_to_Arduino.exe.
Serve per convertire un file audio dal formato WAVE
a quello SORGENTE per Arduino (.INO),
yess, capito bene,
un SORGENTE BELLO E PRONTO,
sarà solo da compilare e ascoltare subito!
Il convertitore funziona così:
Prendete un file audio a vostro piacimento e con il vostro
editor audio preferito tagliatelo, cucitelo e stiratelo
per estrarne una porzione che non superi i 4 secondi di riproduzione.
Il formato non importa, basta che il vostro editor
audio possa riconvertirlo in WAVE.
( Files audio interessanti li scarico da qui: ZEDGE )
Fatto?
Bene, ora convertitelo e salvatelo nel formato
WAVE, 8 Bit, MONO e con samplerate 8000 Hz.
Mi raccomando, il file DEVE essere salvato a:
8 Bit, MONO e RICAMPIONATO a 8KHz!!
Il file sarà grande circa 34 Kb e non dovrà superare
i 4 secondi di riproduzione perchè la memoria
di Arduino non è infinita, e siccome il file verrà "tradotto"
in un grande ARRAY di COSTANTI,
capite bene che il limite è proprio la memoria
FLASH dell'Arduino che abbiamo a disposizione.
Si possono salvare anche dei brani più corti per
riprodurli poi con un determinato comando,
sarà sufficiente creare diversi ARRAYS
(naturalmente assegnando nomi diversi, ovvio)
ma fate attenzione che la somma del tempo di riproduzione
dei brani non deve mai superare il limite massimo di 4 secondi, ok?
In teoria si potrebbe realizzareare un orologio parlante
che "dice" le ore frammentando le varie frasi
in tanti arrays quante saranno le ore da annunciare....
...ma è solo una delle tante applicazioni che mi vengono in mente...
Il convertitore da Wave a .INO si presenta così:

...ho preso di mira Stuart perchè mi è simpatico...
|
POCHE ISTRUZIONI... TANTA RESA! | |
|
1) |
Apri un file Wave (che sia compatibile... altrimenti si incazza) |
|
2) |
Clicca su converti e aspetta qualche secondo di "macinatura bytes" |
|
3) |
Ora decidi se vuoi copiare solo la struttura dell'array, oppure... |
|
4) |
...se vuoi il sorgente COMPLETO e FUNZIONANTE (.ino) |
A questo punto nella tua clipboard verrà copiato
uno dei due formati che hai selezionato.
Quindi, nell'IDE di Arduino fai un bel
"INCOLLA" e tira dentro quel che vuoi, compila e godi.
L'esempio qui sotto illustra come viene creato l'array (di nome RAW) allineato
e formattato in automatico dal mio programma Wave_to_Arduino.exe.
pronto da inserire, o sostituire, nel sorgente di Arduino.
Tenete conto del numero di BYTES restituito in fondo all'array perchè
andrà utilizzato come secondo parametro della funzione Playback_ON().
nell'esempio ho tenuto solo una quindicina di righe di definizione dell'array
cancellandone circa 600 così da poter contenere le dimensioni in una JPEG.
questi invece sono due esempi di sorgente completo,
generati col programma e utilizzando due effetti audio,
BipBip di Willy Coyote e Ring, la cara vecchia suoneria.
|
WAVE -> INO | |
click per scaricare
Istruzioni per utilizzare la libreria:
|
INCLUSIONE LIBRERIA |
DESCRIZIONE | |||
|
#include <PCM_8K.h> |
Direttiva per il compilatore per poter utilizzare correttamente la libreria PCM_8K. | |||
|
Inserire la direttiva all'inizio del programma sorgente. | ||||
|
FUNZIONI e PARAMETRI |
DESCRIZIONE | |||
|
Playback_ON(nomeArray, nBytes, Loop) |
Converte in suono l'array specificato, di lunghezza x bytes, solo una volta o in continuo. | |||
|
array di costanti, integer, boolean |
Loop = Play_SINGLE (false) oppure Play_LOOP (true) | |||
|
Playback_OFF() nessun parametro |
Spegne immediatamente il player | |||
|
CheckPlayer() ritorna un valore boolean |
Interroga lo stato del Player - ritorna un boolean false o true | |||
|
Player_IN_STOP (false) oppure Player_IN_PLAY (true) | ||||
|
FLAGS di SISTEMA |
DESCRIZIONE | |||
|
Player_IN_STOP (false) |
Il Player è disattivato | |||
|
Player_IN_PLAY (true) |
Il Player è in funzione | |||
|
Play_SINGLE (false) |
Esegue il brano una sola volta | |||
|
Play_LOOP (true) |
Esegue il brano in continuazione. Si ferma con Playback_OFF() | |||
|
LA LIBRERIA FUNZIONA CON L'INTERRUPT GENERATO DAL TIMER 2 | ||||
Nei file zippati ci sono anche degli esempi già pronti da compilare
e qualche effetto audio salvato nel formato
WAVE, 8 Bit, MONO, Sample 8 KHz,
in modo che possiate fare i vostri esperimenti.
Your sniffed IP is:
- All rights reserved - 2022/2023 - Tutti i diritti riservati.
I marchi citati sono di proprieta' delle rispettive aziende - All trademarks are the property of their respective owners and companies.
Carlo Manzoni - Via Enrico Fermi, 10 - 26848 San Fiorano (Lo) - Mobile: +39 338 3114954 - C.F: MNZCRL57A04H844O
(i numeri sconosciuti sono bloccati, al cellulare rispondo solo previo SMS/Whatsapp di presentazione)