From 0449aa02f6a6dcba100180c93c3f88fdeeeec1a1 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Tue, 28 Jul 2026 16:45:32 +0200 Subject: [PATCH] fix(utils): handle missing/unresponsive TTS on Linux (#4199) * fix: handle missing/unresponsive TTS on Linux spd-say may be installed but hang indefinitely when speech-dispatcher is not running. Add a 5s timeout and catch TimeoutExpired alongside FileNotFoundError so recording continues without audio. * chore(utils): add log warning for say --------- Co-authored-by: Jiwen Cai --- src/lerobot/utils/utils.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/lerobot/utils/utils.py b/src/lerobot/utils/utils.py index 6aad0c503..05935c419 100644 --- a/src/lerobot/utils/utils.py +++ b/src/lerobot/utils/utils.py @@ -133,10 +133,13 @@ def say(text: str, blocking: bool = False): else: raise RuntimeError("Unsupported operating system for text-to-speech.") - if blocking: - subprocess.run(cmd, check=True) - else: - subprocess.Popen(cmd, creationflags=subprocess.CREATE_NO_WINDOW if system == "Windows" else 0) + try: + if blocking: + subprocess.run(cmd, check=True, timeout=5) + else: + subprocess.Popen(cmd, creationflags=subprocess.CREATE_NO_WINDOW if system == "Windows" else 0) + except (FileNotFoundError, subprocess.TimeoutExpired) as e: + logging.warning("Text-to-speech command failed: %s | Error: %s", cmd, e) def log_say(text: str, play_sounds: bool = True, blocking: bool = False):