diff --git a/README.md b/README.md index 7e41728..fa19a5d 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,27 @@ python main.py - `COMMAND_MIN_LISTEN_MS` — минимальное время записи, чтобы не закрыться мгновенно (1000 мс). - `COMMAND_MAX_LISTEN_MS` — жёсткий потолок (15000 мс). +## Эффекты под AI-ассистента + +Silero звучит естественно, но иногда хочется лёгкой «AI-окраски» в духе J.A.R.V.I.S. — узкую полосу, еле заметную реверберацию, при желании небольшой сдвиг высоты. Это тонкий постпроцессинг, голос и sample rate не меняются. + +По умолчанию эффекты **выключены**. Включаются в `config.py`: + +- `TTS_EFFECTS_ENABLED` — главный тумблер (`False` по умолчанию). +- `TTS_BANDPASS_LOW_HZ` / `TTS_BANDPASS_HIGH_HZ` — полоса пропускания (по умолчанию 200–7000 Гц). Сужение полосы даёт ощущение «голоса по радио». +- `TTS_REVERB_WET` (0..1) и `TTS_REVERB_DECAY_MS` — доля мокрого сигнала и длительность хвоста короткой реверберации (по умолчанию 0.20 и 100 мс). +- `TTS_PITCH_SEMITONES` — сдвиг высоты в полутонах (по умолчанию 0, разумный диапазон ±2). + +Фильтры реализованы на `scipy.signal` (IIR, sosfiltfilt — нулевая фазовая задержка), реверберация — несколько затухающих задержанных копий, pitch — ресэмплинг по линейной интерполяции. Всё in-process, без временных файлов и лишних зависимостей. + +Быстрое A/B сравнение перед тем как переключать тумблер: + +```bash +.venv\Scripts\python.exe utils\preview_effects.py +``` + +Скрипт сгенерирует `sound/_preview_silero_raw.wav` и `sound/_preview_silero_fx.wav` — откройте оба в плеере и решите, нравится ли эффект. Параметры fx-версии берутся из текущего `config.py` (независимо от `TTS_EFFECTS_ENABLED`). + ## Схема commands.yaml Каждая команда — это пара `phrases` + `action`: