OBS 文字转语音:让直播说出任何文字
请注意:Supertonic 3 目前不支持中文,文中的 SuperClonica 声音可朗读其支持的 31 种语言。OBS Studio 本身不会朗读文字:它只显示和混合你提供的内容。要加入声音,就得提供音频,可以是预先生成的片段,也可以是脚本即时生成、再让 OBS 播放的文件。从 OBS 28 起内置了 obs-websocket 服务器,因此同一台电脑上的脚本无需任何插件就能控制来源。
本指南用免费的 SuperClonica 引擎演示这两种方法,它在你的直播电脑上离线朗读文字。我们用 obs-websocket 协议测试过该脚本:每一行都会设置媒体源的文件并重新播放。
固定台词:媒体源和快捷键
像“马上回来”或欢迎语这类反复使用的台词,只需生成一次:superclonica --text "Be right back, grab a snack!" --voice F1 --lang en --output brb.wav。在 OBS 中添加媒体源(Media Source),选择文件,开启“来源激活时重新开始播放”,并在快捷键设置中为该来源指定显示快捷键。每按一次,台词就播放一次。中文版 OBS 的菜单名称可能略有不同。
任意文字实时朗读:脚本与 obs-websocket
在 OBS 中打开 Tools → WebSocket Server Settings(工具 → WebSocket 服务器设置),启用服务器并记下密码。在场景中添加一个名为 TTS 的媒体源,文件留空。然后安装这两个包:
pip install superclonica-cpu obsws-python
把脚本保存为 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)把密码放进 OBS_PASSWORD 后运行,输入文字,或从聊天机器人把文字传给它:
python obs_say.py
每一行都会生成一个 WAV,TTS 来源获得该文件,OBS 从头播放。脚本交替使用两个文件,这样 OBS 永远不会读取正在写入的文件。
选择声音
在目录中任意声音的页面,粘贴一句常用台词(30 到 100 个字符),选择语言并点击朗读。几秒钟就能听到直播效果,无需注册。把 TTS_VOICE 设为十个标准声音 M1 至 M5、F1 至 F5 之一,或目录声音文件的路径,把 TTS_LANGUAGE 设为 31 种语言之一;暂不支持中文。
保持可控
如果观众可以发送文字,只朗读频道点数兑换、Bits 或打赏,限制长度,过滤链接和辱骂,并为 TTS 来源准备静音键。角色声音由粉丝制作,在 SuperClonica 条款范围内用于直播娱乐没有问题,但绝不要让聊天用模仿真人的声音说话。聊天部分请参阅我们的 Twitch 聊天 TTS 指南。