Synthèse vocale dans OBS : faites dire n’importe quel texte à votre live
OBS Studio ne lit pas le texte à voix haute : il affiche et mixe ce que vous lui donnez. Pour ajouter une voix, vous lui donnez de l’audio, soit des extraits lus à l’avance, soit un fichier qu’un script lit à la volée et demande à OBS de jouer. Depuis OBS 28, le serveur obs-websocket est intégré, donc un script sur le même PC pilote une source sans aucun plugin.
Ce guide montre les deux méthodes avec le moteur gratuit SuperClonica, qui lit le texte hors ligne sur votre PC de streaming. Nous avons testé le script avec le protocole obs-websocket : pour chaque ligne, il change le fichier d’une source média et la relance.
Phrases fixes : une source média et un raccourci
Les phrases que vous utilisez sans cesse, comme « je reviens » ou un mot d’accueil, lisez-les une fois : superclonica --text "Je reviens tout de suite, allez chercher un snack !" --voice F1 --lang fr --output brb.wav. Dans OBS, ajoutez une source média (Media Source), choisissez le fichier, activez la relance de la lecture quand la source devient active et donnez à la source un raccourci d’affichage dans les paramètres des raccourcis. À chaque appui, la phrase est jouée. Les noms des menus peuvent légèrement varier dans l’interface traduite d’OBS.
N’importe quel texte en direct : un script et obs-websocket
Dans OBS, ouvrez Tools, WebSocket Server Settings (Outils, paramètres du serveur WebSocket), activez le serveur et notez le mot de passe. Ajoutez à votre scène une source média nommée TTS et laissez son fichier vide. Installez ensuite les deux paquets :
pip install superclonica-cpu obsws-python
Enregistrez le script sous 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)Lancez-le avec le mot de passe dans OBS_PASSWORD et tapez des lignes, ou envoyez-lui le texte de votre bot de chat :
python obs_say.py
Chaque ligne est lue dans un WAV, la source TTS reçoit ce fichier, et OBS le joue depuis le début. Le script alterne deux fichiers, pour qu’OBS ne lise jamais un fichier en cours d’écriture.
Choisir la voix
Sur la page de n’importe quelle voix du catalogue, collez une phrase typique, de 30 à 100 caractères, choisissez la langue et cliquez sur Lire. En quelques secondes vous entendez votre live, sans compte. Réglez TTS_VOICE sur l’une des dix voix de base, M1 à M5 et F1 à F5, ou sur le chemin d’un fichier de voix du catalogue, et TTS_LANGUAGE sur l’une des 31 langues, par exemple fr ; le chinois n’est pas encore pris en charge.
Garder le contrôle
Si les spectateurs peuvent envoyer du texte, ne lisez que les récompenses, bits ou dons, limitez la longueur, filtrez liens et insultes et gardez une touche pour couper la source TTS. Les voix de personnages sont faites par des fans et conviennent pour s’amuser en live dans le cadre des conditions de SuperClonica, mais ne laissez jamais le chat parler avec une voix qui imite une personne réelle. Notre guide sur la synthèse vocale du chat Twitch couvre le côté chat.