Device streams continuous 20ms Opus frames with no turn markers. The loop now decodes Opus, feeds the VAD, fires one turn on end-of-speech, and replies with the firmware JSON contract (tts.state / stt.text) + Opus audio. - app/audio/opus.py: RealOpus/Opus16kEncoder/PassthroughOpus; fix add_dll_directory to use absolute paths (WinError 87) - app/xiaozhi/websocket.py: DeviceLoop.run() = decode -> VAD -> run_turn -> reply - app/config.py: AudioConfig (opus kind + VAD thresholds) - config.yaml: audio.opus=real, VAD 5/8/3000 frames - tests/test_app.py: utterance = loud burst + silence; asserts stt + audio + tts stop - requirements.txt: opuslib>=3 21/21 tests; live handshake verified via zhi.moreminimore.com on venv python.
17 lines
396 B
Plaintext
17 lines
396 B
Plaintext
# Hermes-Xiaozhi Bridge — runtime dependencies (Phase 1)
|
|
# GPU/STT/TTS/opus libraries are NOT listed: backends are lazy-imported and
|
|
# enabled only on the voice-server (CON-002).
|
|
fastapi>=0.110
|
|
uvicorn[standard]>=0.29
|
|
pydantic>=2.6
|
|
pyyaml>=6.0
|
|
httpx>=0.27
|
|
websockets>=12
|
|
|
|
# audio codec (CON-002: lazy-imported; enabled by audio.opus: real)
|
|
opuslib>=3
|
|
|
|
# dev/test
|
|
pytest>=8
|
|
pytest-asyncio>=0.23
|