Come generare audio utilizzando il modello IA di Text-to-Speech Bark

Come creare audio utilizzando il modello di Intelligenza Artificiale Text-to-Speech Bark

Introduzione

Bark è un modello generativo open-source di testo-audio creato da Suno.ai che può generare discorsi altamente realistici e multilingue, incluso rumore di fondo, musica e semplici effetti sonori. Segue un’architettura di tipo GPT in grado di deviare in modi inaspettati da qualsiasi script dato. Tipicamente, i motori di sintesi del testo in voce (TTS) producono suoni robotici e monotoni generati da macchine. Bark genera voci altamente realistiche e dall’aspetto naturale utilizzando modelli di tipo GPT e offre un’esperienza fantastica come ascoltare persone effettive.

Obiettivi di apprendimento

  • Apprendere l’utilizzo di base e la funzionalità del modello Bark, le sue limitazioni e le sue applicazioni.
  • Apprendere come generare file audio da testo utilizzando il codice Python.
  • Creare un discorso ampio utilizzando NLTK e la libreria Bark in Python.

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Installazione di Bark

Utilizziamo un quaderno Google Colab per comprendere la funzionalità e le applicazioni di Bark.

Per installare Bark, utilizzare il comando pip install git+https://github.com/suno-ai/bark.git.

pip install git+https://github.com/suno-ai/bark.git

Nota: Non utilizzare ‘pip install bark’ in quanto installa un pacchetto diverso non gestito da Suno.ai.

Generare audio con Bark

Bark supporta una varietà di lingue come l’inglese, il cinese, il francese, l’hindi, il tedesco, ecc. Supporta anche una libreria di altoparlanti di Bark, che contiene più indicazioni vocali per le lingue supportate. Per favore, controllare l’elenco della libreria di altoparlanti qui.

Bark comprende alcune etichette/note predefinite come Rumore di sfondo, Auditorium, Silenzio all’inizio, ecc., che aiutano a comprendere l’utilizzo degli altoparlanti. È possibile impostare un prompt adeguato nel codice Python utilizzando queste etichette in base alle esigenze dell’utente.

Il codice Python di seguito genera un file audio in base all’altoparlante selezionato.

from bark import SAMPLE_RATE, generate_audio, preload_models# import Audio to listen to generate audio array in notebook.from IPython.display import Audio

Per un determinato input di testo, la funzione generate_audio restituirà un array audio numpy in output con una frequenza di campionamento di 24kHz. Il prompt cronologico seleziona l’altoparlante scelto dall’elenco della libreria di altoparlanti. Il modello utilizza quindi Scipy per salvare un file sonoro di tipo .wav nella posizione desiderata per un ulteriore utilizzo.

# Testo che deve essere convertito in un discorsoaudio1 = """Un aereo Learjet 45 con otto persone a bordo ha deviato giovedì"""# generare un array audio numpy per il testo datoarray_audio1 = generate_audio(audio1,                  prompt_cronologico="en_speaker_6")# riprodurre il testo nel notebookAudio(array_audio1, rate=SAMPLE_RATE)import scipyscipy.io.wavfile.write("bark_out1.wav", rate=SAMPLE_RATE,data=array_audio1)

Bark rileva automaticamente lo script in un determinato testo e genera audio con un altoparlante nella lingua appropriata se non specificato. Alcuni prompt degli altoparlanti, come Narratore, Uomo, Donna, ecc., possono essere dati per generare discorsi audio specifici. Tuttavia, queste non vengono sempre rispettate, specialmente se viene fornito un prompt cronologico audio in conflitto.

testo2 = """donna: Ciao Shakira, come stai?"""array_audio2 = generate_audio(testo2)# riprodurre il testo nel notebookAudio(array_audio2, rate=SAMPLE_RATE)

Generare un discorso non verbale con Bark

Bark è un modello di sintesi del testo in voce completamente generativo sviluppato per scopi di ricerca e dimostrativi. A differenza di approcci precedenti, l’input del testo prompt si converte direttamente in audio senza l’uso intermedio di fonemi. Può quindi generalizzare a istruzioni arbitrarie al di là del discorso, come testi di canzoni, effetti sonori o altri suoni non verbali. Gli utenti possono anche produrre comunicazioni non verbali utilizzando Bark, come risate, canto, aggiunta di esitazione, ecc. Di seguito è riportato un elenco di alcuni noti suoni non verbali che possono essere generati utilizzando Bark.

  • [risata]
  • [ride]
  • [sospiri]
  • [musica]
  • [sorprese]
  • [si schiarisce la gola]
  • – o … per esitazioni
  • ♪ per il testo di una canzone
  • MAIUSCOLO per enfasi di una parola
  • [UOMO] e [DONNA] per indirizzare Bark verso altoparlanti maschili e femminili, rispettivamente

Il Bark può generare tutti i tipi di suoni e, in linea di principio, non fa alcuna differenza tra il parlato e la musica. A volte, Bark sceglie di generare il testo come musica, ma puoi aiutarlo aggiungendo note musicali intorno ai tuoi testi.

Controlla il codice Python sottostante per la generazione di esitazione nel parlato e nella musica.

text_prompt3 = """Mi piace il cibo indiano ma ... a volte è molto PICCANTE"""                 #... aggiunge esitazione nel parlato.speech_array3 = generate_audio(text_prompt3,history_prompt="en_speaker_4")# play text in notebookAudio(speech_array3, rate=SAMPLE_RATE)

text_prompt4 = """    ♪ 5 piccole anatre andavano a nuotare un giorno ♪"""speech_array4 = generate_audio(text_prompt4)# play text in notebookAudio(speech_array4, rate=SAMPLE_RATE)

Bark ha la capacità di clonare completamente le voci, inclusi tono, intonazione, emozione, ecc., a partire dall’audio in input. Può essere usato impropriamente per creare discorsi utilizzando voci conosciute e famose e generare contenuti fraudolenti e malevoli. A causa di questo problema etico, la libreria originale di Bark limita i suggerimenti di storia audio a un insieme limitato di opzioni completamente sintetiche fornite da Suno.ai per ogni lingua supportata. Un elenco di questi suggerimenti di speaker è menzionato nella Bark speaker library.

Elaborazione audio di frasi lunghe con Bark

Bark ha limitato la lunghezza del suo discorso di output a 13-14 secondi. Quindi, se gli fornisci un testo di input molto grande, spezzerà il testo e produrrà un output solo per 14 secondi. Poiché Bark è un modello di tipo GPT, la sua architettura ottimizzata può produrre solo discorsi di questa durata approssimativa. Per generare lunghezze audio più grandi, dovrai suddividere il testo richiesto in frasi più piccole. Quindi, genera l’audio per ciascuna di esse e combina tutti i file audio per la generazione audio complessiva.

Segui il processo passo passo di seguito per generare un audio di narrazione di una storia breve utilizzando Bark.

Passaggio 1: Utilizza la libreria NLTK per suddividere un testo più lungo in frasi e genera una lista di frasi.

story_1 = """C'era una volta una lepre che era amica di una tartaruga. Un giorno, sfidò la tartaruga a una gara. Vedendo quanto lenta procedeva la tartaruga, la lepre pensò che avrebbe vinto facilmente. Così prese una pennichella mentre la tartaruga continuava a procedere. Quando la lepre si svegliò, vide che la tartaruga era già arrivata al traguardo. A sua grande sorpresa, fu la tartaruga a vincere la gara mentre la lepre dormiva.""".replace("\n", " ")sentences = nltk.sent_tokenize(story_1)

Passaggio 2: Genera file audio per ogni frase utilizzando la funzione generate audio di Bark e aggiungi un quarto di secondo di silenzio dopo ogni frase. Crea un ciclo for per generare l’audio per una frase e aggiungere poi il silenzio.

SPEAKER = "v2/en_speaker_6"# quarto di secondo di silenziosilence = np.zeros(int(0.25 * SAMPLE_RATE))pieces = []for sentence in sentences:    audio_array = generate_audio(sentence,history_prompt=SPEAKER)    pieces += [audio_array, silence.copy()]

Passaggio 3: Concatena la sequenza di file audio generati e verifica quindi il file audio combinato per ascoltare tutto il discorso.

Audio(np.concatenate(pieces), rate=SAMPLE_RATE)

Il file audio combinato finale genera un buon clip vocale della narrazione dell’intera storia.

Migliorare il discorso generato

Se il testo fornito è troppo breve, Bark aggiungerà da solo un po’ di audio extra alla fine del prompt. Questo porta alla generazione di un output audio di scarsa qualità. Ecco un esempio.

text_prompt5 = """   cosa è successo amico mio?"""speech_array5 = generate_audio(text_prompt5,history_prompt="v2/en_speaker_6")# play text in notebookAudio(speech_array5, rate=SAMPLE_RATE)

Output del codice precedente:

Nel codice precedente, l’audio generato di 5 secondi per una semplice frase di discorso presenta gli ultimi 3 secondi vuoti. Per superare questo problema e generare un audio di buona qualità per casi simili, prova a utilizzare il parametro min_eos_p. Questo parametro nella funzione generate_text_semantic regola la soglia di Bark per generare il testo. Abbassando il valore soglia di questa probabilità, possiamo interrompere la generazione di testo e risolvere il problema di audio aggiunto in eccesso.

Ecco i passaggi da seguire per migliorare l’audio generato:

  1. Utilizzare la funzione generate_text_semantic per generare i token semantici da un testo specifico.
  2. Ridurre il valore del parametro min_eos_p a 0.05 (valore predefinito 0.2).
  3. Utilizzare la funzione semantic_to_waveform per generare un array audio numpy.

A causa della soglia di probabilità ridotta min_eos_p, la generazione del testo si interrompe in anticipo e produce un breve frammento audio di 2 secondi. Per ulteriori dettagli, si prega di consultare il codice di riferimento di seguito riportato.

from bark.api import semantic_to_waveform
from bark.generation import (generate_text_semantic,preload_models)
semantic_token5 = generate_text_semantic(text_prompt5,history_prompt="v2/en_speaker_6", min_eos_p=0.05) # questo parametro controlla quanto è probabile che la generazione finisca
speech_array6 = semantic_to_waveform(semantic_token5, history_prompt="v2/en_speaker_6")
# play text in notebook
Audio(speech_array6, rate=SAMPLE_RATE)

I modelli tradizionali di text-to-speech generavano suoni robotici, generati dalla macchina e monotoni che avevano un utilizzo limitato. Con gli algoritmi di apprendimento profondo, i più recenti modelli di TTS sono in grado di imitare modelli e intonazioni di discorso umano. Grazie ai progressi tecnologici, è possibile creare applicazioni più coinvolgenti e di parlato naturale come Emotional TTS, Singing TTS, Multilingual TTS, Voice cloning, ecc.

Conclusioni

Bark è un modello generativo di text-to-speech di tipo GPT di tipo open-source che ha una varietà di applicazioni. I casi d’uso di Bark coinvolgono la creazione di audiolibri e podcast multilingue e la generazione di effetti sonori per spettacoli televisivi, videogiochi, ecc. È particolarmente utile nei casi in cui è necessaria la generazione di un’uscita che suoni in modo naturale, conversazioni multi-speaker o creazione di musica. Poiché Bark si concentra sulla generazione di voci umane altamente realistiche, a volte nell’audio vengono generate anche musiche di sottofondo o rumori aggiuntivi. Se ciò non è desiderato per il caso d’uso richiesto, è possibile rimuovere questi rumori utilizzando alcuni strumenti di editing esterni.

Chiavi da tenere a mente

  • Bark è un modello generativo altamente realistico che produce un’uscita audio che suona in modo umano e naturale.
  • È un modello unico in grado di produrre effetti sonori come risate, pianti e musica.
  • È possibile generare un discorso di alta qualità utilizzando Bark attraverso tecniche di formattazione audio e regolando i parametri di soglia.

Domande frequenti

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e vengono utilizzati a discrezione dell’autore.