
# Output atteso: Python 3.8.x o superiore
Se la versione è più vecchia, aggiorna il sistema o installa una versione più recente di Python.
Per mantenere l’ambiente pulito e evitare conflitti con le librerie di sistema, è consigliato utilizzare un virtual environment (venv).
python3 -m venv .venvsource .venv/bin/activateDopo l’attivazione, il prompt della shell dovrebbe mostrare il prefisso (.venv). Da questo punto in poi tutti i pacchetti verranno installati all’interno dell’ambiente isolato.
pip install --upgrade pippip install piper-ttsIl comando pip install piper-tts scarica l’ultima versione stabile disponibile su PyPI, includendo le dipendenze necessarie come onnxruntime.
piper --helpSe il comando restituisce l’elenco delle opzioni disponibili, l’installazione è avvenuta correttamente.
Piper utilizza modelli .onnx accompagnati da un file di configurazione .json. Il file JSON contiene parametri di velocità, rumore e mappature fonetiche.
Per questa guida utilizziamo la voce inglese “Amy”. Il procedimento è identico per qualsiasi altra voce disponibile.
wget -O en_US-amy-medium.onnx "wget -O en_US-amy-medium.onnx.json "Assicurati che entrambi i file siano nella stessa directory di lavoro.
Chiave | Descrizione | Valore tipico |
|---|---|---|
"phoneme_duration_scale" | Scala di durata dei fonemi (influenza la velocità) | 1.0 (normale) |
"inference" | Oggetto con parametri avanzati di inferenza | Vedi riga successiva |
"length_scale" | Fattore di allungamento della frase (valori >1 rallentano) | 1.0 |
"noise_scale" | Intensità del rumore di fondo sintetico | 0.5 |
"noise_w" | Weight del rumore, influisce sulla naturalezza | 0.6 |
Modificando questi valori è possibile personalizzare la voce per adattarla a scenari specifici (es. robotica, assistenti vocali, installazioni artistiche).
Una volta scaricati i file, è possibile verificare il funzionamento con un semplice comando:
echo "Hello from your Raspberry Pi!" | piper -m en_US-amy-medium.onnx --output_file hello.wavaplay hello.wavIl comando aplay è l’utilità di default per la riproduzione di file audio su Linux. Se l’audio è udibile e privo di distorsioni evidenti, il motore è correttamente configurato.
Per applicazioni in tempo reale (es. assistenti vocali) è più efficiente inviare il flusso audio direttamente a aplay senza creare un file intermedio:
echo "This is a streaming test." | piper -m en_US-amy-medium.onnx --output-raw | aplay -r 22050 -f S16_LE -t raw -Assicurati che i parametri di aplay (-r 22050, -f S16_LE) corrispondano a quelli specificati dal modello ONNX. La maggior parte dei modelli forniti da Piper utilizza una frequenza di campionamento di 22 050 Hz e 16 bit PCM.
La qualità percepita dipende non solo dal modello vocale, ma anche da come il segnale audio viene gestito dal sistema operativo. Di seguito trovi le principali aree di intervento.
ALSA (Advanced Linux Sound Architecture) è il sottosistema audio predefinito su Raspberry Pi. Modificando il file /etc/asound.conf o creando un file ~/.asoundrc è possibile:
Esempio di configurazione a bassa latenza:
pcm.!default {type plug slave {pcm "hw:0,0" format S16_LE rate 22050 period_time 10000 # 10 ms di buffer buffer_size 64000 # 64 KB di buffer totale}}Questa configurazione riduce il ritardo di riproduzione a circa 10 ms, ideale per interazioni vocali in tempo reale.
Se il progetto richiede la gestione di più flussi audio simultanei, è possibile installare pulseaudio e configurare un modulo di latenza ridotta. Tuttavia, su Raspberry Pi è consigliato mantenere ALSA per la massima efficienza.
Alcune schede audio USB offrono impostazioni di “sample rate conversion” (SRC) hardware. Verifica la documentazione del produttore e, se disponibile, abilita l’SRC a 22 050 Hz per evitare la conversione software.
Piper espone diversi parametri che influenzano la qualità della voce. Questi possono essere modificati direttamente nel file .json o passati come opzioni da riga di comando.
"inference"): controlla la durata complessiva della frase.Esempio di modifica per una voce più lenta:
{"phoneme_duration_scale": 1.3, "inference": {"length_scale": 1.4, "noise_scale": 0.45, "noise_w": 0.55}}Il rumore sintetico è utile per rendere la voce più naturale, ma un valore troppo alto può introdurre fruscii udibili.
Se non si desidera modificare il file JSON, è possibile sovrascrivere i valori al volo:
echo "Testing custom parameters." | piper -m en_US-amy-medium.onnx \ --phoneme_duration_scale 1.2 \ --length_scale 1.3 \ --noise_scale 0.4 \ --output-raw | aplay -r 22050 -f S16_LE -t raw -Questa flessibilità è particolarmente utile in script che devono adattare la voce a contesti diversi (es. annunci rapidi vs. narrazioni lente).
Le versioni più recenti di Raspberry Pi (es. Raspberry Pi 4 con GPU VideoCore VI) non supportano ancora CUDA, ma è possibile sfruttare la GPU di una scheda NVIDIA collegata via USB o un acceleratore Edge TPU. In questi casi, Piper può essere eseguito con onnxruntime‑gpu.
.venv/bin/pip install onnxruntime-gpuDopo l’installazione, aggiungi il flag --cuda al comando Piper:
echo "Running on GPU." | piper -m en_US-amy-medium.onnx --cuda --output-raw | aplay -r 22050 -f S16_LE -t raw -Nota: è necessario un ambiente CUDA funzionante, tipicamente fornito da container NVIDIA o da driver proprietari installati sul sistema host.
Se il progetto non prevede una GPU dedicata, la configurazione CPU descritta nei paragrafi precedenti è più che sufficiente.
Oltre alle impostazioni audio, ci sono diverse tecniche per ottimizzare le prestazioni di Piper su Raspberry Pi.
Il runtime ONNX può sfruttare più core della CPU. Imposta la variabile d’ambiente OMP_NUM_THREADS al numero di core disponibili (es. 4 su Raspberry Pi 4).
export OMP_NUM_THREADS=4Questa impostazione deve essere definita prima di avviare lo script Python o il comando Piper.
Caricare il modello ONNX in memoria una sola volta riduce il tempo di avvio. Se utilizzi Piper da Python, è possibile mantenere l’oggetto modello in una variabile globale.
from piper import Piperpiper = Piper(model_path="en_US-amy-medium.onnx")def speak(text): audio = piper.synthesize(text) # invia audio a ALSA o salva su fileIn questo modo il modello non viene ricaricato ad ogni chiamata.
Alcuni progetti non richiedono la qualità a 22 050 Hz. Se la destinazione è un altoparlante a bassa fedeltà, è possibile forzare una frequenza di 16 000 Hz, riducendo il carico di elaborazione.
piper -m en_US-amy-medium.onnx --output_raw --sample_rate 16000 | aplay -r 16000 -f S16_LE -t raw -Attenzione: la modifica della frequenza richiede che il modello supporti il nuovo sample rate; altrimenti la voce può risultare distorta.
perfPer identificare colli di bottiglia, utilizza lo strumento perf incluso in Debian:
sudo perf record -g -- piper -m en_US-amy-medium.onnx --output_raw | aplay -r 22050 -f S16_LE -t raw -sudo perf reportIl report evidenzierà le funzioni più costose (tipicamente onnxruntime o numpy).
Problema | Possibile causa | Soluzione consigliata |
|---|---|---|
Audio distorto o graffiato | Buffer audio troppo piccolo o mismatch di formato | Incrementare period_time in asound.conf a 20000 µs; verificare che -r e -f di aplay corrispondano al modello. |
Ritardo elevato (oltre 300 ms) | Modello caricato su CPU singola senza threading | Impostare OMP_NUM_THREADS al numero di core; considerare l’uso di onnxruntime‑gpu se disponibile. |
Errore “model file not found” | Percorso modello errato o permessi insufficienti | Verificare il percorso assoluto; assicurarsi che il file sia leggibile dall’utente corrente. |
Messaggio “CUDA driver version is insufficient” | Driver NVIDIA non installato o incompatibile | Installare i driver NVIDIA corretti; verificare la versione di CUDA supportata dal runtime. |
Altoparlante non suona | Dispositivo audio non selezionato | Usare aplay -l per elencare i dispositivi; impostare hw:0,0 o il numero corretto in asound.conf. |
Per ottenere informazioni più dettagliate, aggiungi il flag --log_level debug:
piper -m en_US-amy-medium.onnx --log_level debug --output-raw | aplay -r 22050 -f S16_LE -t raw -Il log mostrerà i tempi di caricamento del modello, la configurazione audio e eventuali errori di runtime.
Di seguito sono elencati alcuni esempi pratici in cui Piper TTS può essere integrato in progetti basati su Raspberry Pi.
piper per generare risposte a comandi vocali riconosciuti da Snowboy o Porcupine.Un robot basato su Raspberry Pi può annunciare lo stato dei sensori (es. “Temperatura ambiente 23 gradi”) usando Piper. Grazie al modello offline, il robot può operare anche in ambienti senza connessione internet.
Artisti possono sincronizzare la voce sintetizzata con luci LED o proiezioni. La capacità di regolare length_scale e noise_scale permette di creare atmosfere “spettrali” o “robotiche” a seconda del contesto.
Per persone con disabilità visive, Piper può trasformare testi da file PDF o da schermate di terminale in audio chiaro, senza dipendere da servizi cloud che potrebbero violare la privacy.
Un Raspberry Pi installato in una serra può inviare avvisi vocali (“Umidità bassa, attivazione irrigazione”) direttamente sul posto, evitando la necessità di app mobile.
Ottimizzare la qualità audio di Piper TTS su Raspberry Pi richiede un approccio a più livelli: dalla corretta installazione del motore, alla scelta di modelli vocali adeguati, fino alla configurazione fine della catena audio e dei parametri di inferenza. Seguendo i consigli di questa guida, è possibile ottenere una sintesi vocale fluida, a bassa latenza e con un suono pulito, adatta a una vasta gamma di progetti maker.
Per approfondire, considera i seguenti prossimi passi:
length_scale e noise_scale per personalizzare la voce in base al contesto.Manutenzione delle Reti Mesh Wi‑Fi: guida praticaLe reti mes ...
Leggi ->Oggi vi porto nel mondo della saldatura a stagno, una tecnica fondamentale per co ...
Leggi ->Nel settore food & beverage la sicurezza alimentare, la tracciabil ...
Leggi ->La transizione energetica è ormai una priorità nazionale e la produzione di energ ...
Leggi ->Quadro norm ...
Leggi ->Nel panorama attuale dell’, i modelli di linguaggio specializzati nella programmazione ...
Leggi ->Registrare lo schermo di Android senza app esterne: una guida completa ...
Leggi ->L'energia solare sta rivoluzionando le ...
Leggi ->Ciao e bentornati! In questo articolo, voglio parlare di uno dei temi più discuss ...
Leggi ->Nell'era digitale in continua evoluzione, la tecnologia dei modelli di lingu ...
Leggi ->