
1- Raspberry Pi Zero W: setting up speaker e microfono per Google Assistant
Sin dalla loro introduzione le interfacce grafiche (GUI) sono state un mezzo di interazione artificiale inventate per consentire all'utente di comunicare con il computer obbligandolo però ad impararne le regole del linguaggio visivo (icone, puntatori, pulsanti, etc) per potervi interagire. Vocal user interfaceIl cognitive scientist Steven Pinker scriveva nella suo saggio "L'istinto del linguaggio" (1998) che per interagire con i calcolatori dobbiamo ancora apprenderne il linguaggio, perché le macchine non sono abbastanza sveglie per apprendere il nostro. Prima di poter installare Google Assistant e iniziare a sfruttarne le potenzialità di riconoscimento vocale dobbiamo configurare lo speaker e il microfono della Raspberry Pi Zero W. Tech Stack[1] Raspberry Pi Zero W Step 1 - Audio speaker via
|
1 |
sudo leafpad /boot/config.txt |
Nel file config.txt alla riga 56 disabiliamo la voce dtparam=audio=on semplicemente commentandola con # all'inizio . Ora dobbiamo inserire due nuove righe:
1 2 3 4 |
# Enable audio (loads snd_bcm2835) #dtparam=audio=on dtoverlay=hifiberry-dac dtoverlay=i2s-mmap |
Salviamo il file modificato e controlliamo se appare fra i dispositivi di riproduzione con il comando:
1 |
aplay -l |
Ed eccone l'output con esito positivo:
1 2 3 4 |
**** List of PLAYBACK Hardware Devices **** card 0: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 |
Ricordardiamoci che a Card è associato il numero 0 e a Device numero 0, questi due parametri hardware ci serviranno per le impostazioni del file asound.conf
Step 2 - Microfono
La Pi Zero non ha un microfono integrato quindi ne ho acquistato uno mini da collegare alla porta USB.
Capture Hardware devices
Digitiamo da terminale il seguente comando:
1 |
arecord -l |
Ci verranno così mostrati i devices di acquisizione audio disponibili:
1 2 3 4 |
**** List of CAPTURE Hardware Devices **** card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0 |
Come per l'amplificatore dobbiamo ricordarci i parametri hardware per Card 1 e a Device 0.
Step 3 - Editing file: asound.conf
Ora che il microfono è collegato alla porta USB e la Pi Zero all'amplificatore possiamo creare e modificare il file asound.conf salvandolo nella cartella etc.
1 |
sudo leafpad /etc/asound.conf |
Sempre con Leafpad iniziamo a dichiarare che avremmo come dispositivo di acquisizione il Microfono USB e di riproduzione lo Speaker (righe 1-5).
Nelle righe successive andremo invece a definire quali sono le proprietà di questi due dispositivi. Inserendo i corrispettivi parametri hardware associati di Card e Device in pcm.mic (righe 6-11) e pcm.speaker (righe 12-15).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
pcm.!default { type asym capture.pcm "mic" playback.pcm "speaker" } pcm.mic { type plug slave { pcm "hw:1,0" } } pcm.speaker { type hw card 0 } pcm.!default { type plug slave.pcm "dmixer" } pcm.dmixer{ type dmix ipc_key 1024 ipc_perm 0666 slave { pcm "speaker" period_time 0 period_size 1024 buffer_size 8192 rate 44100 channels 2 } } pcm.softvol { type softvol slave.pcm "dmixer" control.name "PCM" control.card 0 } ctl.softvol { type hw card 0 } pcm.!default { type plug slave.pcm "softvol" } |
Infine per per poter regolare comodamente il volume da alsamixer dobbiamo inserire anche le righe dalla 33 alla 45.
Step 4 - Test microfono e speaker
Ora dobbiamo regolare il volume da alxamixer impostandolo a un valore soddisfacente.
1 |
alsamixer |
Non ci resta che testare il sistema microfono e audio registrando e riproducendo un file audio (raw) della durata di 5 secondi inserendo i parametri hardware del microfono (plughw:1,0). Utilizzando arecord dalla linea di comando digitiamo:
1 |
arecord --device=plughw:1,0 --format=S16_LE --duration=5 --rate=16000 --file-type=raw out.raw |
Ora non dobbiamo fare altro che riprodurre il file audio di test inserendo i parametri del nostro speaker (plughw:0,0).
1 |
aplay --device=plughw:0,0 --format=S16_LE --rate=16000 out.raw |
Abbiamo impostato la frequenza di campionamento (sample rate) della sorgente audio a 16000 Hz perché dalla documentazione di Google Assitant risulta che i valori ideali per l'invio dei dati audio in tutti i messaggi dovrebbe essere in un range fra i 16000 e i 24000 Hz, con 16000 Hz come valore ottimale per coprire la gamma di frequenza della voce umana.
Bibliografia
[1] Steven Pinker, Istinto del linguaggio, Mondadori,1998
[2] Louis Frenzel, Handbook of Serial Communications Interfaces: A Comprehensive Compendium of Serial Digital Input/Output I/O) Standards, Newnes, 2015
Sitografia
Amplificatore
[1] PCM Input Class D Audio Power Amplifiers
Inter-IC Sound
[1] I2C-bus specification , Philips Semiconductor (adesso NXP Semiconductors)
[2] , Wikipedia
[3] Common Inter-IC Digital Interfaces for Audio Data Transfer
Google Assistant SDK
[1] Configure and Test the Audio
[2] Audio In Config, Sample Rate Message
Audio Outputs
[1] How to Add Audio Outputs to your Pi Zero
[2] Pi Zero PWM Audio
[3] AudioSpoof with Raspberry Pi Zero, articolo che mostra l'utilizzo LM386
Amplificatore Mono Classe D Max98357
[1] Raspberry Pi Usage