Texto para fala no OBS: faça sua live dizer qualquer texto
O OBS Studio não lê texto em voz alta sozinho: ele mostra e mixa o que você entrega. Para adicionar uma voz você entrega áudio, seja clipes gerados antes, seja um arquivo que um script gera na hora e pede para o OBS tocar. Desde o OBS 28 o servidor obs-websocket vem embutido, então um script no mesmo PC controla uma fonte sem nenhum plugin.
Este guia mostra os dois jeitos com o motor gratuito da SuperClonica, que gera a voz offline no seu PC de stream. Testamos o script contra o protocolo do obs-websocket: para cada linha ele troca o arquivo de uma fonte de mídia e a reinicia.
Frases fixas: fonte de mídia e atalho
Frases que você usa sempre, como “já volto” ou uma saudação, gere uma vez: superclonica --text "Já volto, peguem um lanche!" --voice F1 --lang pt --output brb.wav. No OBS adicione uma fonte de mídia (Media Source), escolha o arquivo, ative reiniciar a reprodução quando a fonte ficar ativa e dê à fonte um atalho de mostrar nas configurações de atalhos. A cada toque, a frase toca. Os nomes dos menus podem variar um pouco na interface traduzida do OBS.
Qualquer texto ao vivo: um script e o obs-websocket
No OBS abra Tools, WebSocket Server Settings (Ferramentas, configurações do servidor WebSocket), ative o servidor e anote a senha. Adicione à cena uma fonte de mídia chamada TTS e deixe o arquivo vazio. Depois instale os dois pacotes:
pip install superclonica-cpu obsws-python
Salve o script como obs_say.py:
import os, sys, wave
import numpy as np
import obsws_python as obs
from superclonica import Superclonica
SOURCE = "TTS" # the name of a Media Source in your scene
VOICE = os.environ.get("TTS_VOICE", "F1") # M1..M5, F1..F5 or a voice file from the catalog
LANGUAGE = os.environ.get("TTS_LANGUAGE", "en")
FILES = [os.path.abspath("tts-a.wav"), os.path.abspath("tts-b.wav")]
tts = Superclonica()
client = obs.ReqClient(host="localhost", port=4455, password=os.environ.get("OBS_PASSWORD", ""), timeout=5)
def save(path, audio, rate):
pcm = (np.clip(np.asarray(audio, dtype=np.float32).reshape(-1), -1, 1) * 32767).astype(np.int16)
with wave.open(path, "wb") as file:
file.setnchannels(1)
file.setsampwidth(2)
file.setframerate(rate)
file.writeframes(pcm.tobytes())
def say(text, turn):
path = FILES[turn % 2] # two files, so OBS never reads the one being written
audio, rate = tts.synthesize(text, voice=VOICE, lang=LANGUAGE)
save(path, audio, rate)
client.set_input_settings(SOURCE, {"local_file": path}, True)
client.trigger_media_input_action(SOURCE, "OBS_WEBSOCKET_MEDIA_INPUT_ACTION_RESTART")
for turn, line in enumerate(sys.stdin):
if line.strip():
say(line.strip(), turn)Rode com a senha em OBS_PASSWORD e digite linhas, ou mande texto do seu bot de chat para ele:
python obs_say.py
Cada linha vira um WAV, a fonte TTS recebe esse arquivo e o OBS toca do começo. O script alterna dois arquivos, para o OBS nunca ler um arquivo enquanto ele é gravado.
Escolha a voz
Na página de qualquer voz do catálogo, cole uma frase típica, de 30 a 100 caracteres, escolha o idioma e clique em Gerar. Em segundos você ouve como a live vai soar, sem conta. Defina TTS_VOICE como uma das dez vozes padrão, M1 a M5 e F1 a F5, ou o caminho de um arquivo de voz do catálogo, e TTS_LANGUAGE como qualquer um dos 31 idiomas, por exemplo pt; chinês ainda não é suportado.
Mantenha sob controle
Se os espectadores podem mandar texto, gere voz só para resgates, bits ou doações, limite o tamanho, filtre links e ofensas e tenha uma tecla para silenciar a fonte TTS. Vozes de personagens são feitas por fãs e servem para diversão na live dentro dos termos da SuperClonica, mas nunca deixe o chat falar com uma voz que imite uma pessoa real. Nosso guia de TTS para o chat da Twitch cobre o lado do chat.