Arduino Audio

Arduino, opportunamente configurato, può riprodurre un breve messaggio audio a 8 bit, con una frequenza di campionamento di 8 kHz e ovviamente in monofonia. Molto utile per gestire questa operazione è la libreria PCM: https://github.com/damellis/PCM
Questa libreria è dotata di un file per Arduino (playback.pde) che contiene, al suo interno, i dati audio che permettono di riprodurre il messaggio vocale “Arduino 2009”. E’ chiaro che sarà interessante poter incidere un qualsiasi messaggio audio che ci possa interessare. Ma prima di tutto passiamo al montaggio del circuito di base che ci permetta di ascoltare quanto enunciato poche righe sopra.

Lo sketch di esempio (playback.pde), fornito con la libreria PCM, viene qui di seguito compattato allo scopo di capire la struttura del software, ma sarà da reperire all’interno del pacchetto relativo alla libreria. Questo perché i dati evidenziati in rosso nello sketch occupano molte pagine e la loro rappresentazione sarebbe quindi solo uno spreco di spazio, senza nulla aggiungere ai concetti espressi.

#include <PCM.h>

const unsigned char sample[] PROGMEM = {
  126, 127, 128, 128, 128, 128, 128, … , 127, 126, 126, 128, 127, // Pagine di dati che contengono l’audio
};

void setup()
{ 
  startPlayback(sample, sizeof(sample));
}

void loop()
{
}

L’ascolto del messaggio conferma la bontà del sistema, anche se, come si potrà constatare, la potenza in uscita da Arduino Uno R3 è troppo bassa per poter pilotare, in modo convincente, l’altoparlante da 0,5 W con impedenza di 8 Ω. Questo inconveniente sarà comunque facilmente risolvibile amplificando il segnale. Come poteva essere facilmente immaginabile, la qualità audio non è sicuramente Hi-Fi, dal momento che vengono utilizzati solo 8 bit, con un campionamento a 8 kHz. Tuttavia per i nostri usi è più che sufficiente e faremo buon viso a cattivo gioco. Per poter registrare il messaggio in formato Wave (.wav) consiglio l’uso della DAW (Digital Audio Workstation) Audacity, reperibile all’indirizzo: https://www.audacityteam.org
Audacity è un ottimo software per registrare, anche in modalità multitraccia, e per elaborare il suono.

Nel nostro caso l’ho utilizzato per la registrazione di una breve traccia monofonica, dove mi sono limitato a dire “Arduino Uno R3”. Per poter lavorare con Arduino e con la libreria PCM abbiamo il limite degli 8 bit con una frequenza di campionamento di 8 kHz, ben lontana dalla qualità CD a 16 bit/44,1 kHz. Per lavorare a 8 bit/8 kHz, dovremo andare a modificare la configurazione di Audacity nel menù Modifica ⇒ Preferenze ⇒ Qualità, dove imposteremo 8000 Hz e 16 bit, dal momento che è il minimo formato di campionamento possibile su questo software. Ma questo fatto non costituisce un problema, in quanto, dopo aver eseguito la registrazione, potremo salvare il file in formato 8 bit.

In merito all’attività di registrazione non mi dilungo dal momento che penso sia cosa nota allo sperimentatore. Qualora così non fosse, invito alla lettura della manualistica in dotazione al programma. Dal momento che la qualità della registrazione non è cruciale e per non complicare eccessivamente, ho utilizzato il microfono della webcam per registrare. Ho impostato la registrazione di una traccia monofonica, tenendo presente di non superare i 4 secondi, che è il limite gestibile da Arduino. Ultima operazione con Audacity è stata il salvataggio del file, ricordando che dobbiamo rimanere nei limiti degli 8 bit/8 kHz. La registrazione è avvenuta a 16 bit/8 kHz, ma possiamo salvare con l’opzione 8 bit selezionando File ⇒ Esporta ⇒ Esporta come Wav. Qui nella parte bassa troveremo la casella Codifica dove selezioneremo Unsigned 8-bit PCM e quindi salveremo il file “Audio.wav”.

Data la non semplice trattazione di questi argomenti, cercheremo di verificare, tramite il software Mediainfo (https://mediaarea.net/en/MediaInfo) se abbiamo svolto correttamente tutti i passi. Questo programma analizza i file audio/video e ci fornisce tutte le indicazioni in merito.

Dalle indicazioni fornite da Mediainfo, il file rispetta la condizione imposta degli 8 bit/8 kHz.
E’ quindi necessario trasformare il file audio .wav in una sequenza di numeri, interpretabile da Arduino, tramite il software EncodeAudio, reperibile all’indirizzo:
https://github.com/shatteredhaven/HauntedPumpkin/tree/master/EncodeAudio-windows
Questo programma, per poter funzionare, necessita dell’installazione sul PC di Java che è reperibile al seguente indirizzo: https://www.java.com/it/download/. Raccomando di contenere all’interno della stessa cartella l’eseguibile “EncodeAudio.exe” e la cartella lib, pena il non funzionamento del software. Una volta lanciato il programma, selezioniamo il file “Audio.wav”.

Alla pressione sul pulsante “Apri” il sofware elaborerà questa conversione e risponderà, se tutto sarà stato fatto a regola d’arte, con un messaggio di successo. Inoltre comunicherà che i dati numerici sono disponibili nella clipboard.

Fatto quest’ulteriore passo, non dovremo fare altro che inserire questi dati nell’editor di Arduino in corrispondenza della riga evidenziata in rosso nello sketch di cui sopra. Caricando questo file in Arduino potremo ascoltare, con una certa soddisfazione, la registrazione audio. La pressione sul tasto di reset dell’Arduino permetterà il riascolto.