OBS Text-to-Speech: Ihr Stream spricht jeden Text
OBS Studio liest Text nicht selbst vor: Es zeigt und mischt, was Sie ihm geben. Für eine Stimme geben Sie ihm Audio, entweder vorab vertonte Clips oder eine Datei, die ein Skript spontan vertont und von OBS abspielen lässt. Seit OBS 28 ist der obs-websocket-Server eingebaut, ein Skript auf demselben PC steuert also eine Quelle ganz ohne Plugin.
Diese Anleitung zeigt beide Wege mit der kostenlosen SuperClonica-Engine, die Text offline auf Ihrem Streaming-PC vertont. Wir haben das Skript gegen das obs-websocket-Protokoll getestet: Für jede Zeile setzt es die Datei einer Medienquelle und startet sie neu.
Feste Sätze: Medienquelle und Hotkey
Sätze, die Sie immer wieder brauchen, etwa „bin gleich zurück“ oder eine Begrüßung, vertonen Sie einmal: superclonica --text "Bin gleich zurück, holt euch einen Snack!" --voice F1 --lang de --output brb.wav. Fügen Sie in OBS eine Medienquelle (Media Source) hinzu, wählen Sie die Datei, aktivieren Sie den Neustart der Wiedergabe beim Aktivieren der Quelle und geben Sie der Quelle in den Hotkey-Einstellungen eine Taste zum Anzeigen. Bei jedem Druck läuft der Satz. Die Menünamen können in der übersetzten OBS-Oberfläche leicht abweichen.
Jeder Text live: ein Skript und obs-websocket
Öffnen Sie in OBS Tools, WebSocket Server Settings (Werkzeuge, WebSocket-Servereinstellungen), aktivieren Sie den Server und notieren Sie das Passwort. Fügen Sie Ihrer Szene eine Medienquelle namens TTS hinzu und lassen Sie die Datei leer. Installieren Sie dann die zwei Pakete:
pip install superclonica-cpu obsws-python
Speichern Sie das Skript als 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)Starten Sie es mit dem Passwort in OBS_PASSWORD und tippen Sie Zeilen ein, oder leiten Sie Text aus Ihrem Chatbot hinein:
python obs_say.py
Jede Zeile wird zu einem WAV vertont, die Quelle TTS bekommt diese Datei, und OBS spielt sie von vorn. Das Skript wechselt zwischen zwei Dateien, damit OBS nie eine Datei liest, die gerade geschrieben wird.
Die Stimme wählen
Fügen Sie auf der Seite einer beliebigen Katalogstimme einen typischen Satz ein, 30 bis 100 Zeichen, wählen Sie die Sprache und klicken Sie auf Vertonen. In wenigen Sekunden hören Sie, wie Ihr Stream klingt, ohne Konto. Setzen Sie TTS_VOICE auf eine der zehn Standardstimmen, M1 bis M5 und F1 bis F5, oder auf den Pfad einer Katalog-Stimmdatei, und TTS_LANGUAGE auf eine der 31 Sprachen, etwa de; Chinesisch wird noch nicht unterstützt.
Unter Kontrolle halten
Wenn Zuschauer Text schicken können, vertonen Sie nur Belohnungen, Bits oder Spenden, begrenzen Sie die Länge, filtern Sie Links und Beleidigungen und halten Sie eine Stummtaste für die TTS-Quelle bereit. Figurenstimmen sind von Fans gemacht und für Spaß im Stream im Rahmen der SuperClonica-Bedingungen in Ordnung, aber lassen Sie den Chat nie mit einer Stimme sprechen, die eine reale Person imitiert. Unsere Anleitung zu Twitch-Chat-TTS behandelt die Chat-Seite.