Voix : plus d'accélération sur les SRT, moteur local Qwen3-TTS

SRT : la voix n'est plus jamais accélérée (atempo sans plafond, jusqu'à 2×
et plus, rendait la voix incompréhensible). Un morceau plus long que son
sous-titre déborde et décale les suivants ; les sous-titres suivent la voix,
la vidéo s'allonge et un avertissement signale le décalage.

Rythme : style par défaut « neutre », consignes Gemini sans « rythme
entraînant », débit Edge des styles dynamique/promo ramené à +0 %/+3 %.

Nouveau moteur « qwen » : service qwen-tts (Qwen3-TTS sur CPU, gratuit,
français, ton piloté par consigne, clonage de voix depuis qwen-tts/voices).
Même vérification Whisper que Gemini, généralisée ; repli qwen → gemini →
edge, et une lecture sous 85 % du texte est écartée (mots sautés/faux).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Upu97wMmsRkBoj6iVM4rH6
This commit is contained in:
Claude committed 2026-09-29 09:39:47 +00:00
1 parent 4b8fbe6d8e
commit 44daa88a49
20 files changed
+579 -98

No files matched your search

+15
View File
@@ -21,3 +21,18 @@ def test_edge_fallbacks_are_french_and_same_gender():
def test_style_prompt_precedes_text():
assert build_prompt("Salut", "neutral") == "Salut"
assert build_prompt("Salut", "dynamic").endswith(":\nSalut")
def test_qwen_voice_keeps_clones_and_matches_gender():
from app.voices import qwen_instruction, resolve_qwen_voice
assert resolve_qwen_voice("clone:camille") == "clone:camille"
assert resolve_qwen_voice("Ryan") == "ryan"
assert resolve_qwen_voice("Charon") == "aiden" # voix Gemini masculine
assert resolve_qwen_voice(None) == "serena"
assert "French" in qwen_instruction("dynamic")
def test_qwen_voice_falls_back_to_same_gender_elsewhere():
assert resolve_edge_voice("uncle_fu").gender == "male"
assert resolve_gemini_voice("uncle_fu").id == "Charon"