GUIA

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.