Add voice messages

This commit is contained in:
d.klimov
2026-04-12 15:59:25 +03:00
parent 7ca8268b78
commit 128cc70ab9
5 changed files with 38 additions and 10 deletions

View File

@@ -41,7 +41,8 @@ def is_speaking() -> bool:
def _mpv_cmd() -> list[str]:
"""Команда mpv для воспроизведения из stdin"""
cmd = ["mpv", "--no-video", "--really-quiet", "--no-terminal"]
mpv_bin = os.getenv("MPV_PATH", "mpv")
cmd = [mpv_bin, "--no-video", "--really-quiet", "--no-terminal"]
if AUDIO_SINK:
cmd.append(f"--audio-device=pulse/{AUDIO_SINK}")
cmd.append("-")
@@ -54,6 +55,7 @@ def speak(text: str, agent_id: str = "cosmo"):
except Exception as e:
log.exception("TTS ошибка")
print(f"⚠️ Ошибка воспроизведения: {e}")
play_error_sound()
def _speak_elevenlabs(text: str, agent_id: str):
@@ -98,13 +100,33 @@ def _speak_elevenlabs(text: str, agent_id: str):
_current_process = None
def _play_sound_file(filename: str, wait: bool = False):
"""Воспроизводит файл из папки sounds/ через mpv.
wait=True — блокирует до конца воспроизведения."""
sounds_dir = os.path.join(os.path.dirname(__file__), "..", "sounds")
path = os.path.normpath(os.path.join(sounds_dir, filename))
mpv_bin = os.getenv("MPV_PATH", "mpv")
cmd = [mpv_bin, "--no-video", "--really-quiet", "--no-terminal", path]
if wait:
subprocess.run(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
else:
subprocess.Popen(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
def play_activation_sound():
"""Звук активации после wake word"""
"""Звук активации — неблокирующий"""
try:
if sys.platform == "darwin":
subprocess.run(["afplay", "/System/Library/Sounds/Glass.aiff"])
else:
subprocess.run(["paplay", "/usr/share/sounds/freedesktop/stereo/bell.oga"])
_play_sound_file("Success_Cosmo.mp3", wait=False)
except Exception as e:
log.exception("Ошибка звука активации")
print(f"⚠️ Ошибка звука: {e}")
log.warning(f"Ошибка звука активации: {e}")
def play_error_sound():
"""Звук ошибки — 'не получилось'"""
import traceback
print("🔴 play_error_sound вызван из:")
traceback.print_stack()
try:
_play_sound_file("Error_Cosmo.mp3")
except Exception as e:
log.warning(f"Ошибка звука ошибки: {e}")