Impara

Sintesi vocale in Python: salva l'audio come file WAV

Rene, Kabir Goel 
Sintesi vocale in Python: salva l'audio come file WAV

Per convertire testo in parlato in Python, invia un testo a un modello vocale e salva l’audio restituito. Questa guida usa l’SDK Python di Cartesia per generare un file WAV con Sonic.

Servono Python 3.9 o successivo, connessione internet e un account Cartesia con accesso API. L’esempio usa l’SDK versione 4.2.0.1 Chiama un’API ospitata: il testo esce dal tuo computer. Per la sintesi offline, usa invece un motore vocale locale.

Installa l’SDK Python

Crea un ambiente virtuale nella directory del progetto:

python -m venv .venv

Su macOS o Linux, attivalo con:

source .venv/bin/activate

Su Windows PowerShell, usa:

.venv\Scripts\Activate.ps1

Poi installa la versione usata in questa guida:

python -m pip install "cartesia==4.2.0"

Se il sistema usa python3 anziché python, usa quel comando per creare l’ambiente. Fissare la versione dell’SDK mantiene stabili i nomi dei metodi dell’esempio. Quando aggiorni, consulta le note di rilascio dell’SDK per le modifiche.

Imposta la chiave API

Crea una chiave API nel Cartesia Playground. Assegnale i permessi necessari alla sintesi vocale. Impostala nel terminale da cui eseguirai Python.

Su macOS o Linux:

export CARTESIA_API_KEY="your-api-key"

Su Windows PowerShell:

$env:CARTESIA_API_KEY = "your-api-key"

Sostituisci your-api-key con la tua chiave. Trattala come una password: non salvarla in Git, non incollarla in un notebook pubblico e non inserirla nel codice browser. In un’applicazione distribuita, conservala nel gestore dei segreti del server. Se viene esposta, revocala e creane una nuova.

Genera e salva un file WAV

Salva questo codice come speak.py:

import os
from pathlib import Path

from cartesia import Cartesia

api_key = os.environ.get("CARTESIA_API_KEY")
if not api_key:
    raise SystemExit("Set CARTESIA_API_KEY before running this script.")

output_path = Path("hello.wav")

with Cartesia(api_key=api_key) as client:
    response = client.tts.generate(
        model_id="sonic-latest",
        transcript="Hello from Python. Your first audio file is ready.",
        voice="e07c00bc-4134-4eae-9ea4-1a55fb45746b",
        output_format={
            "container": "wav",
            "encoding": "pcm_f32le",
            "sample_rate": 44100,
        },
    )
    response.write_to_file(output_path)

print(f"Saved audio to {output_path.resolve()}")

Eseguilo dallo stesso terminale:

python speak.py

Dopo una richiesta riuscita, apri hello.wav in un lettore che supporta WAV PCM a virgola mobile. Lo script stampa il percorso completo, quindi non devi indovinare quale directory abbia usato Python. Salva l’audio, ma non lo riproduce automaticamente. Eseguirlo di nuovo sovrascrive hello.wav ed effettua un’altra richiesta API.

La richiesta segue l’esempio d’uso pubblicato nell’SDK.1 L’ID voce è quello dell’esempio di riferimento. Puoi sostituirlo con un ID voce disponibile nel tuo account.

Scegli voce, modello e formato audio

transcript è il testo che Sonic deve pronunciare. Parti da una frase prima di inviare un documento lungo. Usa testo che puoi inviare all’API ed evita di registrare trascrizioni private nei log applicativi.

voice seleziona chi parla. Prova una frase nel generatore di voci, poi usa l’ID della voce scelta nella richiesta. Il nome visualizzato non è un ID voce. Se usi una voce clonata, assicurati di avere il permesso di utilizzare la voce di quella persona.

L’esempio usa sonic-latest, come il riferimento dell’SDK. Un alias di modello può cambiare indipendentemente dall’SDK installato. Per test di produzione ripetibili, scegli un ID di modello supportato specifico dalla documentazione dei modelli e registralo insieme all’ID voce e al testo di prova.

Il formato di output descrive il file audio:

CampoValore nell’esempioSignificato
containerwavRacchiude l’audio in un file WAV con intestazione.
encodingpcm_f32leConserva i campioni come PCM a virgola mobile a 32 bit little-endian.
sample_rate44100Usa 44.100 campioni audio al secondo.

Il PCM grezzo non ha un’intestazione WAV. Rinominare un file PCM grezzo in .wav non lo trasforma in un WAV. Se invii audio a un sistema telefonico o altro servizio, verifica contenitore, codifica e frequenza di campionamento richiesti prima di generare il parlato.

Risolvi gli errori comuni

SintomoCosa verificare
ModuleNotFoundError: No module named 'cartesia'Attiva l’ambiente in cui hai installato l’SDK. Esegui python -m pip show cartesia con lo stesso interprete Python che esegue lo script.
Set CARTESIA_API_KEY before running this script.Imposta la variabile d’ambiente nel terminale corrente, poi riesegui lo script. Un editor o notebook può usare un ambiente diverso.
Errore di autenticazione o permessiVerifica che la chiave sia attiva, appartenga all’account previsto e abbia i permessi necessari. Non incollarla mai in una segnalazione di errore.
Errore sul modello, sulla voce o sul formato di outputControlla il riferimento API attuale e conferma che la voce sia disponibile nell’account. Copia gli ID esattamente.
Errore di limite di frequenzaControlla i limiti dell’account e riduci la concorrenza delle richieste. Evita un ciclo di tentativi immediati.
AttributeError relativo a generateVerifica la versione dell’SDK installata. Esempi precedenti possono usare client.tts.bytes; questa guida usa client.tts.generate nella versione 4.2.0.
Il file esiste ma non si riproduceConferma che la richiesta usi container="wav" e che il lettore supporti PCM a virgola mobile. Controlla che il file non sia vuoto.

Quando chiedi aiuto, includi versioni di Python e SDK, codice di stato ed eventuale ID della richiesta restituito con l’errore. Rimuovi prima chiavi API e testo privato.

Quando usare invece lo streaming

Salvare un WAV è utile per narrazione, voiceover e verifica di un’integrazione. Un’applicazione conversazionale può dover riprodurre l’audio prima che sia pronta una risposta completa o accettare testo mentre un LLM lo genera.

In quel caso, installa il supporto WebSocket nello stesso ambiente:

python -m pip install "cartesia[websockets]==4.2.0"

Poi parti dall’esempio WebSocket con input in streaming dell’SDK.1 Serviranno anche riproduzione audio, buffering e gestione delle interruzioni. Scrivere su disco i segmenti in arrivo non basta a far parlare l’applicazione in tempo reale.

Quando l’esempio breve funziona, sostituisci il testo con una frase della tua applicazione. Ascolta nomi, numeri e abbreviazioni prima di generare un lotto più grande. Controlla i prezzi API e conserva gli ID modello e voce con i risultati dei test.

Note a piè di pagina

  1. Cartesia, SDK Python 4.2.0 su PyPI e riferimento d’uso dell’SDK, consultati il 13 settembre 2026. ↩ ↩2 ↩3

Domande frequenti

Come converto testo in parlato in Python?

Installa l'SDK Python di Cartesia, imposta CARTESIA_API_KEY nell'ambiente e chiama client.tts.generate con trascrizione, modello, voce e formato di output. Chiama response.write_to_file per salvare l'audio restituito. Questa guida usa l'SDK versione 4.2.0.

Questo esempio TTS in Python funziona offline?

No. L'SDK Cartesia invia il testo all'API di Cartesia e richiede connessione internet e accesso API. Puoi riprodurre offline il WAV salvato. Se il testo deve restare sul tuo computer, scegli invece un motore vocale locale.

L'SDK Python di Cartesia è gratuito?

Installare l'SDK non concede generazione vocale illimitata. L'utilizzo API dipende dal piano e dai limiti dell'account. Controlla i prezzi attuali prima di eseguire un lotto di richieste.

Posso trasmettere il parlato in streaming anziché salvare un file?

Sì. L'SDK supporta risposte in streaming e input WebSocket. Salvare un WAV completo è un primo test più semplice, ma non implementa la riproduzione in tempo reale. Per input testuale incrementale, installa l'extra cartesia[websockets] e consulta l'esempio WebSocket dell'SDK.