| Category | Details |
|---|---|
| Environment | Board: M5Stack CoreS3 (AW88298 speaker amp + ES7210 mic codec) |
| Project | components/livekit/examples/voice_agent |
| LiveKit Component | livekit/livekit=0.3.6 |
| ESP-IDF | v5.5.3 |
| Toolchain | Windows + idf.py |
| Codec Board Type | CONFIG_LK_EXAMPLE_CODEC_BOARD_TYPE="M5Stack_CoreS3" |
| Goal | Run voice_agent example and hear remote AI agent voice via built-in speaker |
| Actual Behavior | - WiFi + LiveKit connection works (Room state: Connected) |
- Audio subscription created (codec=9, sample_rate=16000, ch=1)
- Audio frames received/decoded; I2S writes called continuously
- PCM data has reasonable amplitude (max_abs 5k–17k)
- Speaker is completely silent (same audio audible on browser client)|
|Hardware Verification|Separate firmware successfully plays beeps/tones on CoreS3 speaker; hardware path (AXP2101 + AW9523 + AW88298) is functional|
|Audio Configuration|Board: M5Stack_CoreS3
I2C: SDA=12, SCL=11
I2S: MCLK=0, BCLK=34, WS=33, DIN=14, DOUT=13
Out: Codec=AW88298, PA=-1, use_mclk=1, pa_gain=3
In: Codec=ES7210
Mode: TDM (Mono/Stereo slot tested)|
|Key Questions|
- Is
voice_agentexpected to work on CoreS3 (AW88298) or only ES8311 boards? - Is there a missing config in
board_cfg.txt(I2S mode, slots, channel mask, AW88298 specifics)? - Can a working
board_cfg, AW88298 init steps, and mono/stereo config be shared? - Should the user switch to an officially supported ES8311 board (e.g., ESP32-S3-Korvo-2)?|
|Offer|Full serial logs and source files (board.c,codec_init.c,i2s_render.c) available upon request|
Log excerpt
text
Sub audio stream: codec=9, sample_rate=16000, ch=1
…
I (7028) livekit_engine: Opus payload first 4 bytes: 78 07 c9 79 (size=55)
I (7029) livekit_engine: Sub audio frames received: 1 (size=55, voice=1, ret=0)
Get samplerate 16000 chanel 2
I (7036) AV_RENDER: ARender Auto pause audio first frame …
I (7042) I2S_RENDER: reapply out unmute+vol(100) at write #1
I (7045) I2S_RENDER: write #1 size=2560 max_abs=1 peak=1
I (7050) I2S_RENDER: first 8 samples: 0 0 0 0 0 0 0 0
…
I (45631) I2S_RENDER: write #98 size=2560 max_abs=5602 peak=5602
I (45676) I2S_RENDER: write #99 size=2560 max_abs=10420 peak=10420
I (45721) I2S_RENDER: write #100 size=2560 max_abs=13022 peak=13022