Skip to content

Switch Full Duplex Component - #4

Merged
TrevorSchirmer merged 5 commits into
mainfrom
beta
Oct 8, 2026
Merged

TrevorSchirmer merged 5 commits into
mainfrom
beta

Conversation

@TrevorSchirmer

@TrevorSchirmer TrevorSchirmer commented Oct 8, 2026 •

Copy link
Copy Markdown
Member

Version: 26.10.8.1

What does this implement/fix?

  • Updates the full duplex component

Types of changes

  • Bugfix (fixed change that fixes an issue)
  • New feature (thanks!)
  • Breaking change (repair/feature that breaks existing functionality)
  • Dependency Update - Does not publish
  • Other - Does not publish
  • Website of github readme file update - Does not publish
  • Github workflows - Does not publish

Checklist / Checklijst:

  • The code change has been tested and works locally
  • [] The code change has not yet been tested

If user-visible functionality or configuration variables are added/modified:

  • Added/updated documentation for the web page

Summary by CodeRabbit

  • New Features
    • Full-duplex audio is supported with ESPHome 2026.10 and later, allowing audio input and output to share an I2S port.
  • Compatibility
    • Firmware builds now target ESPHome beta and development versions; stable builds will resume when ESPHome 2026.10.0 is available.
    • The minimum ESPHome version is now 2026.10.0 beta 1.

Bunton33 and others added 5 commits October 8, 2026 13:23
Replace the vendored i2s_audio (2026.9.0 + #16882 with local fixes) with
2026.9.1's i2s_audio plus the full duplex changes from #19959, the
implementation on track upstream.

The bus now allocates the TX/RX pair once at boot and initializes RX
first, so RX drives the shared clocks and MCLK for the PCM1808. TX starts
and stops with each playback session from a fresh preload, which keeps
speaker timestamps exact without the old realign workaround.

Only the PR's own changes are applied; its dev base needs a newer
esp-audio-libs and audio_dac than 2026.9.1. Core.yaml is unchanged and
already meets the PR's validation rules.
Drop the vendored i2s_audio and load full duplex straight from #19959,
pinned to its head commit. The PR builds on ESPHome 2026.10, so:
- min_version is now 2026.10.0b1, giving older ESPHome a clear error
- build-beta.yml builds with ESPHome beta
- CI and weekly checks skip stable until 2026.10.0 ships

build.yml (main) stays on stable, so stable firmware can't be published
on a beta ESPHome. Once #19959 ships in a release, remove the
external_components block and restore stable in the workflows.
@github-actions github-actions Bot added the bugfix Something isn't working label Oct 8, 2026
@coderabbitai

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: d224e626-16a4-4bdb-9822-3b60102c9acc
📥 Commits

Reviewing files that changed from the base of the PR and between e32a1db and 3e162ca.

📒 Files selected for processing (21)
  • .github/workflows/build-beta.yml
  • .github/workflows/ci.yml
  • .github/workflows/weekly.yml
  • Integrations/ESPHome/Core.yaml
  • Integrations/ESPHome/components/i2s_audio/README.md
  • Integrations/ESPHome/components/i2s_audio/__init__.py
  • Integrations/ESPHome/components/i2s_audio/i2s_audio.cpp
  • Integrations/ESPHome/components/i2s_audio/i2s_audio.h
  • Integrations/ESPHome/components/i2s_audio/media_player/__init__.py
  • Integrations/ESPHome/components/i2s_audio/microphone/__init__.py
  • Integrations/ESPHome/components/i2s_audio/microphone/i2s_audio_microphone.cpp
  • Integrations/ESPHome/components/i2s_audio/microphone/i2s_audio_microphone.h
  • Integrations/ESPHome/components/i2s_audio/speaker/__init__.py
  • Integrations/ESPHome/components/i2s_audio/speaker/i2s_audio_spdif.cpp
  • Integrations/ESPHome/components/i2s_audio/speaker/i2s_audio_spdif.h
  • Integrations/ESPHome/components/i2s_audio/speaker/i2s_audio_speaker.cpp
  • Integrations/ESPHome/components/i2s_audio/speaker/i2s_audio_speaker.h
  • Integrations/ESPHome/components/i2s_audio/speaker/i2s_audio_speaker_standard.cpp
  • Integrations/ESPHome/components/i2s_audio/speaker/i2s_audio_speaker_standard.h
  • Integrations/ESPHome/components/i2s_audio/speaker/spdif_encoder.cpp
  • Integrations/ESPHome/components/i2s_audio/speaker/spdif_encoder.h
💤 Files with no reviewable changes (17)
  • Integrations/ESPHome/components/i2s_audio/speaker/i2s_audio_spdif.h
  • Integrations/ESPHome/components/i2s_audio/README.md
  • Integrations/ESPHome/components/i2s_audio/media_player/init.py
  • Integrations/ESPHome/components/i2s_audio/microphone/init.py
  • Integrations/ESPHome/components/i2s_audio/microphone/i2s_audio_microphone.cpp
  • Integrations/ESPHome/components/i2s_audio/speaker/spdif_encoder.cpp
  • Integrations/ESPHome/components/i2s_audio/microphone/i2s_audio_microphone.h
  • Integrations/ESPHome/components/i2s_audio/speaker/i2s_audio_spdif.cpp
  • Integrations/ESPHome/components/i2s_audio/speaker/i2s_audio_speaker.cpp
  • Integrations/ESPHome/components/i2s_audio/speaker/i2s_audio_speaker.h
  • Integrations/ESPHome/components/i2s_audio/i2s_audio.cpp
  • Integrations/ESPHome/components/i2s_audio/speaker/i2s_audio_speaker_standard.cpp
  • Integrations/ESPHome/components/i2s_audio/i2s_audio.h
  • Integrations/ESPHome/components/i2s_audio/speaker/i2s_audio_speaker_standard.h
  • Integrations/ESPHome/components/i2s_audio/init.py
  • Integrations/ESPHome/components/i2s_audio/speaker/init.py
  • Integrations/ESPHome/components/i2s_audio/speaker/spdif_encoder.h

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.


Walkthrough

The workflows now select ESPHome beta and dev versions, and Core.yaml raises the minimum ESPHome version and pins i2s_audio to an ESPHome repository commit. The local i2s_audio component, including its microphone, speaker, and SPDIF code, is removed.

Changes

ESPHome I2S component migration

Layer / File(s) Summary
ESPHome version selection
.github/workflows/build-beta.yml, .github/workflows/ci.yml, .github/workflows/weekly.yml, Integrations/ESPHome/Core.yaml
The workflows select beta and dev versions instead of stable. Core.yaml updates the firmware version and minimum supported ESPHome version.
Upstream I2S source and microphone integration
Integrations/ESPHome/Core.yaml, Integrations/ESPHome/components/i2s_audio/...
Core.yaml pins i2s_audio to an ESPHome repository commit. The local I2S component, microphone integration, media-player schema, and README are removed.
Speaker and SPDIF implementation removal
Integrations/ESPHome/components/i2s_audio/speaker/*
The local speaker integration and standard-I2S and SPDIF speaker implementations and declarations are removed.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix

Suggested reviewers: bunton33

Merge Risk: 🔵 Low · up to 3e162

The change switches the firmware to the upstream full-duplex audio component and uses beta ESPHome builds. Merging is reasonable, but the build depends on a pinned unreleased commit and beta tooling, so the owner should plan to revert those overrides once ESPHome 2026.10 ships.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the main change: switching the full-duplex component to the upstream ESPHome implementation. It is concise and related to the pull request.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit checks the version pin,
Then hops where upstream code begins.
The old I2S files leave the tray,
While beta builds light the way.
A quiet thump, then ears stand tall.
The burrow’s ready for them all.

Comment @coderabbitai help to get the list of available commands.

@TrevorSchirmer
TrevorSchirmer merged commit 893c0ad into main Oct 8, 2026
11 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugfix Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants