Dare voce a un’applicazione non è più una pipeline da assemblare a mano in tutti i casi: su Azure convivono i mattoni separati di Azure Speech in Foundry Tools e un servizio gestito che li fonde in un’unica interfaccia. Sapere quando usare i mattoni e quando usare il servizio gestito è esattamente ciò che AI-103 chiede su questa parte del dominio.
Le tre modalità di trascrizione
Lo speech to text si presenta in tre modalità, e sbagliare modalità è il difetto architetturale tipico.
La trascrizione in tempo reale trascrive l’audio mentre arriva da microfono o da stream, restituendo risultati intermedi. È la scelta per didascalie dal vivo, dettatura, assistenza in linea a un operatore e sistemi a risposta vocale. Si usa via Speech SDK, Speech CLI o REST per audio breve. In preview può trascrivere due canali audio in modo indipendente, etichettando ciascun risultato col canale di origine: utile per una registrazione stereo dove ogni lato è un interlocutore.
La fast transcription invia un file audio e restituisce la trascrizione in modo sincrono e più rapidamente del tempo reale. Si sceglie quando serve il testo il prima possibile con una latenza prevedibile e non si vuole gestire un job: sottotitoli da generare al volo, note di riunione, segreteria telefonica.
La batch transcription è asincrona e pensata per grandi volumi di audio già presenti in storage, tipicamente blob Azure: archivi video, registrazioni di call center. Si sottomette il job e si recuperano i risultati dopo.
Sopra le modalità stanno le funzioni trasversali: la diarizzazione, che separa gli interlocutori e ne attribuisce le porzioni di trascritto, fino a 35 parlanti distinti in una registrazione; la language identification, configurabile all’avvio o in continuo con una lista di lingue candidate; e le phrase list, la personalizzazione più leggera possibile, perché aggiunge a runtime termini attesi senza addestrare nulla.
Sintesi vocale, SSML e voci personalizzate
Il text to speech parte dalle voci standard neurali, disponibili pronte in oltre cento lingue e locale, affiancate dalle voci HD per una qualità superiore. Per la sintesi si scelgono due percorsi: la sintesi in tempo reale via Speech SDK o REST, e la batch synthesis API per generare in modo asincrono audio più lungo di dieci minuti, come audiolibri o lezioni, con richiesta inviata, stato interrogato in polling e file scaricato quando il servizio lo rende disponibile.
Il controllo fine passa da SSML. L’elemento voice sceglie la voce, mstts:express-as applica uno stile con l’attributo style e ne modula l’intensità con styledegree fra 0,01 e 2, prosody regola rate, pitch e volume, break inserisce pause, lang cambia la lingua parlata sulle voci multilingue.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="it-IT">
<voice name="nome-della-voce">
<mstts:express-as style="empathetic" styledegree="1.5">
<prosody rate="-10%">Mi dispiace per l'attesa.</prosody>
</mstts:express-as>
<break time="400ms"/>
Sto verificando il suo ordine.
</voice>
</speak>
Due trappole: gli stili sono specifici della voce, e se il valore di style manca o non è valido l’intero elemento mstts:express-as viene ignorato e il servizio parla in modo neutro; inoltre non tutte le voci supportano tutti i tag SSML, in particolare le voci HD, le personal voice e quelle embedded.
Quando la voce standard non basta si passa alla custom voice, termine ombrello che copre il fine-tuning di una professional voice e la personal voice. L’accesso è limitato e va richiesto. Il passaggio che l’esame ama è il consenso: prima di addestrare una professional voice bisogna caricare nel progetto la registrazione in cui il voice talent dichiara di acconsentire all’uso della propria voce. Il training richiede almeno 300 utterance e si conclude con il deployment su un endpoint dedicato.
La voce come modalità di un agente
Per un agente conversazionale la scelta è fra assemblare la catena speech to text, modello, text to speech e usare la Voice Live API, che integra riconoscimento, AI generativa e sintesi in un’unica interfaccia gestita, esposta via WebSocket e compatibile con gli eventi della Realtime API di Azure OpenAI. Non devi distribuire né dimensionare i modelli: li selezioni.
Quello che si guadagna passando al servizio gestito sono le capacità conversazionali che una catena fai-da-te non ha: soppressione del rumore, cancellazione dell’eco, rilevamento robusto delle interruzioni e rilevamento avanzato di fine turno, che lascia respirare le pause naturali senza chiudere il turno. Ci sono poi l’integrazione con gli avatar e il function calling, che permette all’agente vocale di eseguire azioni e di ancorare le risposte secondo il pattern VoiceRAG.
La personalizzazione resta disponibile anche qui: in ingresso si possono usare le phrase list o un modello custom speech per il vocabolario di dominio, in uscita una custom voice per l’identità di marca. Con il Speech SDK, un modello custom si aggancia impostando l’identificativo dell’endpoint sulla configurazione:
import azure.cognitiveservices.speech as speechsdk
speech_config = speechsdk.SpeechConfig(subscription=chiave, region="la-tua-regione")
speech_config.speech_recognition_language = "it-IT"
speech_config.endpoint_id = "id-endpoint-custom-speech"
audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)
riconoscitore = speechsdk.SpeechRecognizer(speech_config, audio_config)
esito = riconoscitore.recognize_once()
if esito.reason == speechsdk.ResultReason.RecognizedSpeech:
print(esito.text)
elif esito.reason == speechsdk.ResultReason.NoMatch:
print("nessun parlato riconosciuto")
Il custom speech vale la pena solo dopo una misura: si confronta la trascrizione del modello base con una trascrizione umana dello stesso audio e si calcola il word error rate. Se il WER è alto, si addestra. Un dettaglio operativo utile: per usare un modello custom con la batch transcription non serve un endpoint di deployment ospitato, mentre serve in tutti gli altri casi.
Ragionare sull’audio e tradurre il parlato
«Ragionamento multimodale a partire dall’audio» significa due cose diverse. La prima è l’audio nativo: nella Voice Live API alcuni modelli ricevono l’audio direttamente, senza passare da una trascrizione intermedia, e questo preserva segnali che il testo perde. La seconda è l’analisi asincrona con Azure Content Understanding in Foundry Tools, la cui modalità audio produce un trascritto in formato WEBVTT separato per parlante, con diarizzazione e riconoscimento del ruolo, e in più estrae campi strutturati — riassunto, sentiment, temi, aziende e persone citate. Gli analyzer prebuilt prebuilt-callCenter e prebuilt-audioSearch coprono l’analisi post-chiamata e la conversazione generica, e si possono personalizzare definendo il proprio schema di campi. È la strada da indicare quando lo scenario parla di insight su archivi di chiamate, non di conversazione dal vivo.
Per la traduzione del parlato, infine, la Speech service offre una API standard di traduzione in tempo reale che restituisce testo, audio sintetizzato o entrambi, con una lingua sorgente dichiarata. Sopra c’è Live Interpreter, pensato per lo scambio conversazionale: identifica la lingua parlata in continuo senza che tu la debba impostare, gestisce il cambio di lingua nella stessa sessione senza riavviarla e usa una voce naturale che conserva stile e tono, potendo anche adottare una personal voice. Ricorda il limite di dimensionamento: la traduzione vocale copre direttamente due lingue target per chiamata; oltre la seconda occorre una risorsa Foundry multi-service o servizi di traduzione separati, con costi aggiuntivi a carattere.
Da ricordare per l’esame
- Real-time per l’audio mentre scorre, fast transcription per un file con risposta sincrona più veloce del tempo reale, batch per grandi volumi già in storage. Sbagliare qui è l’errore più penalizzato del sottodominio.
- Phrase list è personalizzazione a runtime senza training; custom speech è un modello addestrato, da giustificare con una misura di word error rate, e non richiede endpoint ospitato solo per la batch transcription.
- La custom voice ha accesso limitato e richiede il consenso registrato del voice talent caricato nel progetto prima dell’addestramento.
- La Voice Live API è la scelta per un agente vocale gestito: speech-to-speech su WebSocket, fine turno avanzato, soppressione rumore, avatar e function calling, con custom speech in ingresso e custom voice in uscita.
- Per gli insight su registrazioni usa Content Understanding in modalità audio (
prebuilt-callCenter,prebuilt-audioSearch); per il dialogo multilingue dal vivo usa Live Interpreter, che non richiede di dichiarare la lingua di ingresso.