Stabilize German TTS sentence chunking
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
@@ -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"))
|
||||||
|
|||||||
Reference in New Issue
Block a user