Add voice messages
This commit is contained in:
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user