Un’introduzione ad Amazon Polly

Amazon Polly è un servizio AWS text-to-speech, cioè si occupa di convertire il testo in voce naturale. Polly genera output vocali realistici, quasi indistinguibili dall’essere umano, basandosi su tecnologie avanzate di deep learning.

Uno dei punti di forza di Polly è la sua capacità di supportare più lingue e accenti, rendendolo un’opzione versatile per aziende che operano su scala globale. Attualmente, Polly offre supporto per decine di lingue, con voci sia maschili che femminili.

Il funzionamento di Amazon Polly è semplice, ma allo stesso tempo sofisticato. Il servizio utilizza API REST che permettono agli sviluppatori di inviare testo al motore di sintesi vocale e ricevere un file audio in risposta. 

Vediamo una panoramica del processo?

Il processo di Amazon Polly

  • Input. inviamo una stringa di testo in formato semplice o in SSML (Speech Synthesis Markup Language): trattasi di un linguaggio strutturato tramite tag, esattamente come il più noto HTML, che permette di modificare le proprietà fondamentali della voce passandole come parametri dentro i tag
  • Elaborazione. Polly analizza il testo e lo converte in fonemi utilizzando modelli di machine learning avanzati. Per le lingue supportate, Polly comprende regole grammaticali, pronunce di parole complesse e persino elementi contestuali.
  • Output. Il risultato è un file audio che può essere scaricato nei formati più comuni, come ad esempio MP3.

Come ogni altro servizio dell’ecosistema AWS, Polly è progettato all’insegna di scalabilità ed efficienza.

Grazie alla sua integrazione nativa con altri servizi AWS come S3 e Lambda, è possibile creare pipeline di elaborazione vocale flessibili e scalabili.
Vediamo alcune comuni applicazioni pratiche:

    • Accessibilità. Polly è uno strumento essenziale per creare contenuti accessibili adatti anche a persone con disabilità visive, basti pensare ad audiolibri o lettori vocali.
    • E-learning. Sono sempre di più le piattaforme educative online a utilizzare Polly per generare lezioni audio personalizzate e on demand, migliorando la fruibilità del materiale per gli studenti.
    • Chatbot e assistenti virtuali. Combinando Polly con altri servizi nativi come Amazon Lex e Lambda, è possibile creare chatbot vocali avanzati per migliorare il servizio clienti.
    • Media e intrattenimento. Polly può essere impiegato per la generazione di narrazioni automatiche faceless, cioè senza mettere la propria faccia e nemmeno la propria voce all’interno di contenuti come podcast o video.

Amazon Polly è un esempio brillante di come i servizi Cloud possono migliorare la qualità delle applicazioni moderne, rendendole più accessibili e interattive. 

Per uno sviluppatore AWS, è uno strumento versatile che si integra perfettamente con l’ecosistema AWS e apre nuove possibilità in vari settori.

Creiamo la voce di Darth Vader?

In questa sezione voglio presentare un esempio che chiarisca quanto estese siano le possibilità di personalizzazione all’interno di Amazon Polly. Per farlo, ho scelto un personaggio con una voce iconica e molto particolare. In un certo senso la potremmo definire estrema sotto le principali caratteristiche vocali: il ritmo, il timbro e il volume.

Il personaggio che vogliamo impersonare in Amazon Polly è nientemeno che Darth Vader, uno dei principali antagonisti nella saga di Star Wars. Le sue frasi iconiche sono numerose, ma credo che nessuna possa avvicinarsi a “Sono tuo padre!” o in lingua originale “I am your father”, pronunciata di fronte al figlio Luke Skywalker, protagonista della storia. Per quei pochi che non l’hanno presente, potete ascoltarla e godervi la scena a questo link: https://www.youtube.com/watch?v=_lOT2p_FCvA&t=65s

Proviamo a sfruttare le impostazioni di Polly per realizzare una versione più fedele possibile alla frase. Il primo passo consiste nel collegarsi alla console AWS e al servizio di Polly: https://eu-central-1.console.aws.amazon.com/polly/home/

Cliccando sul tasto arancione Try Polly, accediamo a quella che è l’effettiva schermata di test, il nostro banco degli esperimenti. Le opzioni sono molteplici: in alto possiamo selezionare diversi tipi di TTS-engine, ossia motori di traduzione da testo a voce. In ordine cronologico, il primo reso disponibile da AWS è stato quello standard, a cui sono seguiti prima quello neurale e poi quello basato sull’intelligenza artificiale generativa.

Secondo la dicitura, quest’ultima produce le voci più espressive e simili alla voce umana, ma a noi interessa una voce ai confini di ciò che potremmo definire umano; ciò che ci interessa è la gamma di personalizzazione a disposizione e non c’è dubbio che il motore standard sia il migliore in tal senso, dunque è quello che scegliamo.

Nella parte inferiore possiamo leggere quello che è il testo di default, un semplice messaggio di benvenuto dove compare il nome della voce preimpostata: nel nostro caso una voce femminile di nome Joanna.

Lasciamo stare momentaneamente la scelta della voce di base e concentriamoci sullo switch con etichetta SSML. Abilitiamo questo switch e osserviamo che è comparso il tag <speak>, all’interno del quale scriveremo il nostro codice.

A questo punto inseriamo dentro il tag speak la frase che vogliamo personalizzare: nel nostro caso, è “No… I am your father”.

Possiamo ora concederci il lusso di cedere alla curiosità e cliccare sul tasto arancione Listen, in alto a destra nella schermata. Fatto? Non stupitevi se il risultato è lontanissimo da quello che vogliamo. Tanto per cominciare stiamo usando una voce femminile, assai poco indicata per rappresentare Darth Vader.

Utilizziamo la tendina per selezionare la voce e ascoltiamo le diverse voci maschili proposte: esse potrebbero cambiare da una regione all’altra, oltre che tra diversi motori TTS. Nella regione eu-central-1, corrispondente a Francoforte, ne sono disponibili tre: selezioniamo quella di Matthew, Male.

Ora possiamo iniziare a lavorare sulle proprietà dei tag SSML per avvicinarci a quello che vogliamo. La prima modifica serve a creare la sensazione che il nostro interlocutore sia una figura imponente, più grande della media. Si tratta di un fenomeno cognitivo che possiamo riscontrare ogni volta che ci troviamo al telefono con qualcuno che non abbiamo mai visto di persona: la nostra mente prova a immaginarne le fattezze basandosi su ciò che udiamo.

Il tag <amazon:effect vocal-tract-length> replica questo fenomeno: assegnando un valore positivo, tende a ingigantire l’immagine di chi parla, mentre assegnando un valore negativo tende a rimpicciolirla. Scegliamo un +15% per simulare il timore che incute la presenza del nostro villain.

Il passaggio successivo consiste nel modificare il ritmo della frase. Il ritmo, come altri parametri, può essere passato tramite la proprietà rate nel tag <prosody>: un valore positivo incrementa il ritmo della parlata, un valore negativo lo diminuisce. Darth Vader pronuncia quelle parole in maniera lenta e coerente con la teatralità del personaggio e l’impatto emotivo che la scena vuole avere sullo spettatore. Assegniamo un valore di -30%.

A questo punto vogliamo regolare il timbro: quello neutrale non è assolutamente adeguato per Vader. Il suo doppiatore, James Earl Jones, è famoso per il suo timbro particolarmente grave, uno dei motivi per cui George Lucas gli ha assegnato la parte. Vogliamo rifletterlo nel nostro codice attraverso la proprietà pitch nel tag <prosody>: i valori positivi spingono la voce verso un timbro acuto, quelli negativi verso un timbro grave. Anche qui, una scelta opportuna corrisponde a -30%.

Ora vogliamo tenere conto delle pause che il personaggio fa all’interno della stessa frase, l’aspetto interpretativo e scenico. Per noi è molto semplice: è sufficiente aggiungere una coppia di tag <break></break> nei punti desiderati. Li posizioniamo sia dopo il “No”, sia dopo “I”.

Infine, vogliamo riflettere l’enfasi che Vader pone sulle due parole più importanti della frase: “I” e “father”. Per farlo aumentiamo l’intensità della sua voce tramite il parametro volume nel tag <prosody>. Questi tag possono essere inseriti uno dentro l’altro senza problemi, esattamente come accade con i tag HTML e allo stesso modo le proprietà dichiarate nei tag più interni vanno a sovrascrivere le corrispondenti proprietà presenti nei tag più esterni:

Già qui direi che il risultato è più che buono! A seguire è possibile apportare ulteriori modifiche sulle singole parole in modo da avvicinarsi sempre di più alla versione originale. Personalmente mi ritengo soddisfatto con questo codice.

Et voilà! Siamo riusciti a personalizzare la nostra versione di Polly al punto da farle impersonare uno dei personaggi più iconici della storia del cinema. Le possibilità sono veramente sconfinate. Vi immaginate avere Darth Vader come assistente vocale addetto alla gestione della domotica al posto di Alexa? Il lato oscuro non è mai stato così attraente… e al tempo stesso servizievole!

Vuoi integrare Polly nei tuoi sistemi?

Affidati ai nostri esperti AWS e compila i campi qui sotto, ti ricontatteremo quanto prima.