Stabilize German TTS sentence chunking

This commit is contained in:
Mikei386
2026-08-23 14:14:46 +02:00
parent 06e1a7029a
commit 76bfc65978
3 changed files with 21 additions and 1 deletions
+3
View File
@@ -685,6 +685,9 @@ services:
TTS_CODE_SWITCH_ENABLED: "false" TTS_CODE_SWITCH_ENABLED: "false"
XTTS_QUEUE_TIMEOUT: "15" XTTS_QUEUE_TIMEOUT: "15"
XTTS_TIMEOUT: "120" XTTS_TIMEOUT: "120"
# Short sentence-sized requests avoid long generated silences and
# truncated weather/status summaries with Annmarie Nele.
XTTS_CHUNK_CHARS: "60"
PIPER_TIMEOUT: "120" PIPER_TIMEOUT: "120"
networks: [frontend] networks: [frontend]
depends_on: depends_on:
@@ -110,6 +110,20 @@ class LanguageSegmentationTests(unittest.TestCase):
self.assertIn("29 Kilometer pro Stunde", spoken) self.assertIn("29 Kilometer pro Stunde", spoken)
self.assertNotIn("km", spoken.lower()) self.assertNotIn("km", spoken.lower())
def test_weather_summary_is_split_into_short_complete_chunks(self):
text = (
"Heute in Rastatt: teils sonnig, trocken, 10 bis 22 Grad. "
"Abends wolkiger, 16 bis 21 Grad. Böen bis 29 km/h. "
"Kein Regen erwartet. Quelle: wetter.com, wetteronline.de"
)
segments = gateway.prepare_segments(text)
spoken = " ".join(part for _, part in segments)
self.assertEqual(len(segments), 4)
self.assertTrue(all(len(part) <= 60 for _, part in segments))
self.assertIn("29 Kilometer pro Stunde", spoken)
self.assertIn("Kein Regen erwartet", spoken)
self.assertIn("wetteronline Punkt de", spoken)
class FallbackTests(unittest.TestCase): class FallbackTests(unittest.TestCase):
def setUp(self): def setUp(self):
+4 -1
View File
@@ -38,7 +38,10 @@ MAX_AUDIO_BYTES = int(os.getenv("TTS_MAX_AUDIO_BYTES", str(64 * 1024 * 1024)))
XTTS_TIMEOUT = float(os.getenv("XTTS_TIMEOUT", "120")) XTTS_TIMEOUT = float(os.getenv("XTTS_TIMEOUT", "120"))
PIPER_TIMEOUT = float(os.getenv("PIPER_TIMEOUT", "120")) PIPER_TIMEOUT = float(os.getenv("PIPER_TIMEOUT", "120"))
QUEUE_TIMEOUT = float(os.getenv("XTTS_QUEUE_TIMEOUT", "15")) QUEUE_TIMEOUT = float(os.getenv("XTTS_QUEUE_TIMEOUT", "15"))
CHUNK_CHARS = int(os.getenv("XTTS_CHUNK_CHARS", "220")) # XTTS can insert multi-second silences or truncate the remainder when a
# moderately long German paragraph is sent as one request. Keeping requests
# close to one sentence proved substantially more stable with Annmarie Nele.
CHUNK_CHARS = int(os.getenv("XTTS_CHUNK_CHARS", "60"))
TRIM_THRESHOLD = int(os.getenv("XTTS_TRIM_THRESHOLD", "90")) TRIM_THRESHOLD = int(os.getenv("XTTS_TRIM_THRESHOLD", "90"))
TRIM_PADDING_MS = int(os.getenv("XTTS_TRIM_PADDING_MS", "18")) TRIM_PADDING_MS = int(os.getenv("XTTS_TRIM_PADDING_MS", "18"))
CROSSFADE_MS = int(os.getenv("XTTS_CROSSFADE_MS", "8")) CROSSFADE_MS = int(os.getenv("XTTS_CROSSFADE_MS", "8"))