Skip to content

Reaction: Lower volume or pause media when you start talking#599

Merged
d4rken merged 1 commit into
mainfrom
feat/conversation-awareness-reaction
May 25, 2026
Merged

Reaction: Lower volume or pause media when you start talking#599
d4rken merged 1 commit into
mainfrom
feat/conversation-awareness-reaction

Conversation

@d4rken

@d4rken d4rken commented May 25, 2026

Copy link
Copy Markdown
Member

What changed

AirPods "Conversational Awareness" can now drive a reaction in CAPod: when you start speaking, it can automatically lower the media volume (by an amount you choose) or pause playback, and restores it when you stop. It's opt-in per device and off by default, found under Reactions once Conversational Awareness is enabled. On Android the AirPods don't lower the volume on their own — this fills that gap.

Technical Context

  • The pods already push a speaking-detection event (the same signal behind Apple's own volume ducking); it was decoded but never acted on. On Android the firmware doesn't duck audio itself, so the reaction runs app-side.
  • The speaking status is the last byte of the 0x4B frame ({1,2} = started, {6,8,9} = stopped, others = keep-alive); confirmed against real AirPods Pro 3 captures and the librepods project. The earlier assumption read the wrong byte, which is why it never fired.
  • Disengage happens on the stop event, with a frame-idle stale timeout as a fallback if a stop is dropped, plus cleanup on disconnect and service stop. Volume is restored unconditionally to the pre-duck level so it doesn't ratchet down when another app also moves the volume.
  • AAP-only: requires bonded pods with an active session and the device-side Conversational Awareness setting on — the action picker only appears once it's enabled.

Review checklist

  • Status-byte mapping {1,2}/{6,8,9} for models other than Pro 3 (only Pro 3 was tested on-device)
  • Unconditional volume restore vs. respecting a deliberate mid-conversation volume change

Closes #581

Reacts to the AirPods speaking-detection event (AAP 0x4B): lowers media volume by a configurable amount or pauses playback when you start talking, and reverts when you stop. Per-profile, Pro-gated, opt-in (default off).

Decodes the speaking status from the last payload byte ({1,2}=start, {6,8,9}=stop, else keep-alive); engage/disengage with a frame-idle stale timeout to recover a dropped stop, plus disconnect and service-stop cleanup.
@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 May 25, 2026
@d4rken d4rken merged commit dbbfa75 into main May 25, 2026
11 checks passed
@d4rken d4rken deleted the feat/conversation-awareness-reaction branch May 25, 2026 21:55
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.

[Conversational awareness] media volume not lowered

1 participant