Utilizando o Bark
Autoestudo
1. Instalando o bark
pip install git+https://github.com/suno-ai/bark.git
2. Exemplo simples utilizando o bark
from bark import SAMPLE_RATE, generate_audio, preload_models
from scipy.io.wavfile import write as write_wav
import simpleaudio as sa
# download and load all models
preload_models()
# generate audio from text
text_prompt = """
Hello, my name is Suno. And, uh — and I like pizza. [laughs]
But I also have other interests such as playing tic tac toe.
"""
audio_array = generate_audio(text_prompt)
# Convert the audio array to int16 format (required by simpleaudio)
audio_array_int16 = (audio_array * 32767).astype("int16")
# Play audio directly
play_obj = sa.play_buffer(audio_array_int16, 1, 2, SAMPLE_RATE)
play_obj.wait_done() # Wait until audio finishes playing
3. Utilizando o ljspeech
O bark é um modelo consideravelmente pesado, fazendo com que seja bem difícil utilizá-lo sem GPU. Utilizar modelos de sintetização de fala mais simples pode ser uma solução aceitável.
Autoestudo
3.1. Instalando o ljspeech
Para conseguir rodar o ljspeech com o exemplo do site acima, é necessário instalar os seguintes pacotes:
pip install txtai[pipeline-audio] soundfile
3.2. Exemplo simples
import soundfile as sf
import simpleaudio as sa
from txtai.pipeline import TextToSpeech
# Build pipeline
tts = TextToSpeech("NeuML/ljspeech-jets-onnx")
# Generate speech
speech = tts("Say something here")
# Write to file
sf.write("out.wav", speech, 22050)
# Read the file
wave_obj = sa.WaveObject.from_wave_file("out.wav")
# Play audio
play_obj = wave_obj.play()
play_obj.wait_done() # Wait until audio finishes playing
4. Utilizando a api da OpenAI
Autoestudo
Novamente, uma opção válida é utilizar a API paga da OpenAI para ter à disposição modelos mais avançados de Text-to-speech sem precisar rodá-los localmente. Segue um exemplo em Python:
from pathlib import Path
from openai import OpenAI
client = OpenAI()
speech_file_path = Path(__file__).parent / "speech.mp3"
response = client.audio.speech.create(
model="tts-1",
voice="alloy",
input="Today is a wonderful day to build something people love!"
)
response.stream_to_file(speech_file_path)