Skip to content

Device: Disable Adaptive Audio Noise slider outside Adaptive mode#508

Merged
d4rken merged 3 commits intomainfrom
fix/adaptive-noise-gating
Apr 14, 2026
Merged

Device: Disable Adaptive Audio Noise slider outside Adaptive mode#508
d4rken merged 3 commits intomainfrom
fix/adaptive-noise-gating

Conversation

@d4rken
Copy link
Copy Markdown
Member

@d4rken d4rken commented Apr 14, 2026

What changed

The "Adaptive Audio Noise" slider in per-device settings (AirPods Pro 2 / Pro 3 / AirPods 4 with ANC) is now greyed out with a hint when the noise control mode isn't set to Adaptive. Previously the slider was always active, so changing it while in regular ANC, Transparency, or Off had no audible effect — making the control look broken.

Technical Context

  • AdaptiveAudioNoise only affects the device's passthrough blend when AncMode.current == ADAPTIVE. The wire packet format is correct (matches librepods reverse-engineering docs) and the device accepts + echoes the level, but the firmware ignores it outside of Adaptive mode.
  • Gating is on ancMode.current only, not pendingAncMode. pendingAncMode is set when a mode is tapped while pods are out of ear (command queued, not sent) — the device hasn't actually switched, so a new noise level would still be a no-op. Gating on pending state would misleadingly imply the level applies.
  • On AirPods Pro 3 (firmware 81.2675...6503) no audible difference has been observed between level=0 and level=100 even in Adaptive mode — the packet is accepted but may need additional protocol work (possible enable packet, or different interpretation than Pro 2). Left a comment on AapSetting.AdaptiveAudioNoise noting this needs more investigation.

@d4rken d4rken added enhancement Add a new feature of improve an existing feature coms/AAP Uses Apples AirPod Protocol. Requires Android ROM with fixed L2CAP support on the Bluetooth sockets. labels Apr 14, 2026
d4rken added 2 commits April 14, 2026 15:50
Switch the 0x4D init packet flags from 0x0E to 0xD7 to match the value captured from Apple's own stack (librepods AACPManager). The previous value traced to MagicPodsCore and matches no known Apple capture.

Invert the Adaptive Audio Noise level on write and read: wire 0 means max noise reduction, wire 100 means transparency-like. UI stays in intuitive 100 = max NC semantics, matching librepods' slider behavior.
The encode/decode now flips UI 0..100 to wire 100..0. Update the clamp and decode expectations accordingly, and add a round-trip test to guard against asymmetric changes in either direction.
@d4rken d4rken merged commit 02fd834 into main Apr 14, 2026
10 checks passed
@d4rken d4rken deleted the fix/adaptive-noise-gating branch April 14, 2026 13:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

coms/AAP Uses Apples AirPod Protocol. Requires Android ROM with fixed L2CAP support on the Bluetooth sockets. enhancement Add a new feature of improve an existing feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant