feat: добавить Audio Level monitoring — RMS громкости микрофона в WebSocket

- settings.py: audio_level_enabled, audio_level_interval_ms
- satellite.py: _calculate_rms() — вычисление RMS (0.0-1.0)
- satellite.py: _send_audio_level() — фоновая задача отправки
- satellite.py: _last_mic_level, _audio_level_task атрибуты
- satellite.py: интеграция в _start() / _stop()
- satellite.py: вычисление RMS в event_from_mic() для всех классов
- __main__.py: CLI --audio-level-enabled, --audio-level-interval-ms

Событие в WebSocket (10 раз в секунду):
{type: audio-level, data: {level: 0.42}}
This commit is contained in:
2026-05-20 17:17:18 +03:00
parent 5c92eed55b
commit b28052e93e
4 changed files with 291 additions and 13 deletions
+17
View File
@@ -275,6 +275,19 @@ async def main() -> None:
help="Port for WebSocket server (default: 8675)"
)
# Audio level monitoring
parser.add_argument(
"--audio-level-enabled",
action="store_true",
help="Enable audio level monitoring and send audio-level events to WebSocket"
)
parser.add_argument(
"--audio-level-interval-ms",
type=int,
default=100,
help="Interval for audio-level events in milliseconds (default: 100)"
)
# Sounds
parser.add_argument(
"--awake-wav", help="WAV file to play when wake word is detected"
@@ -451,6 +464,10 @@ async def main() -> None:
websocket_enabled=args.websocket_enabled,
websocket_host=args.websocket_host,
websocket_port=args.websocket_port,
# Audio level
audio_level_enabled=args.audio_level_enabled,
audio_level_interval_ms=args.audio_level_interval_ms,
),
timer=TimerSettings(
started=split_command(args.timer_started_command),