From 59a607ba57ff3d20f86c829ddb87bc1efca440e0 Mon Sep 17 00:00:00 2001 From: future Date: Sun, 15 Mar 2026 17:29:23 +0300 Subject: [PATCH] Bundle STT start sound asset and default to repo path --- .env.example | 2 +- README.md | 2 +- app/core/config.py | 8 ++++---- assets/sounds/alisa-golosovoj-pomoschnik.mp3 | Bin 0 -> 28557 bytes 4 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 assets/sounds/alisa-golosovoj-pomoschnik.mp3 diff --git a/.env.example b/.env.example index 92d72e4..e446601 100644 --- a/.env.example +++ b/.env.example @@ -41,7 +41,7 @@ PORCUPINE_SENSITIVITY=0.8 # AUDIO_OUTPUT_DEVICE_NAME=pulse # AUDIO_OUTPUT_DEVICE_INDEX=5 # STT start sound (played after wake word before listening) -# STT_START_SOUND_PATH=~/Music/alisa-golosovoj-pomoschnik.mp3 +# STT_START_SOUND_PATH=assets/sounds/alisa-golosovoj-pomoschnik.mp3 # STT_START_SOUND_VOLUME=0.25 TTS_EN_SPEAKER=en_0 WEATHER_LAT=63.56 diff --git a/README.md b/README.md index 37a9ef7..c038f23 100644 --- a/README.md +++ b/README.md @@ -156,7 +156,7 @@ python run.py | `AUDIO_INPUT_DEVICE_INDEX` | Нет | auto | Индекс PortAudio для микрофона (приоритетнее `AUDIO_INPUT_DEVICE_NAME`) | | `AUDIO_OUTPUT_DEVICE_NAME` | Нет | auto | Подстрока имени динамика/выхода (например `pulse`) | | `AUDIO_OUTPUT_DEVICE_INDEX` | Нет | auto | Индекс PortAudio для вывода (приоритетнее `AUDIO_OUTPUT_DEVICE_NAME`) | -| `STT_START_SOUND_PATH` | Нет | `~/Music/alisa-golosovoj-pomoschnik.mp3` | Короткий звук после wake word и перед стартом STT (wav/mp3) | +| `STT_START_SOUND_PATH` | Нет | `assets/sounds/alisa-golosovoj-pomoschnik.mp3` | Короткий звук после wake word и перед стартом STT (wav/mp3) | | `STT_START_SOUND_VOLUME` | Нет | `0.25` | Громкость звука старта STT (0..1) | | `TTS_EN_SPEAKER` | Нет | `en_0` | Английский голос TTS | | `WEATHER_LAT` | Нет | - | Широта города по умолчанию | diff --git a/app/core/config.py b/app/core/config.py index 1d6dcc8..939626a 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -130,10 +130,10 @@ time.tzset() # Короткий "beep" после wake word и перед запуском STT, чтобы пользователь понял: # можно начинать говорить. Поддерживает wav/mp3 (если pygame mixer поддерживает mp3), # иначе будет использован mpg123 как fallback. -_stt_sfx_default = Path.home() / "Music" / "alisa-golosovoj-pomoschnik.mp3" -STT_START_SOUND_PATH = os.getenv("STT_START_SOUND_PATH", "").strip() or str( - _stt_sfx_default -) +_stt_sfx_default = BASE_DIR / "assets" / "sounds" / "alisa-golosovoj-pomoschnik.mp3" +if not _stt_sfx_default.exists(): + _stt_sfx_default = Path.home() / "Music" / "alisa-golosovoj-pomoschnik.mp3" +STT_START_SOUND_PATH = os.getenv("STT_START_SOUND_PATH", "").strip() or str(_stt_sfx_default) try: STT_START_SOUND_VOLUME = float(os.getenv("STT_START_SOUND_VOLUME", "0.25")) except Exception: diff --git a/assets/sounds/alisa-golosovoj-pomoschnik.mp3 b/assets/sounds/alisa-golosovoj-pomoschnik.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..811da8d7df27aec746ca920a2ca669b4d1a91f93 GIT binary patch literal 28557 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 literal 0 HcmV?d00001