Add opt-in experimental software volume for HDMI/DisplayPort - #119
Add opt-in experimental software volume for HDMI/DisplayPort#119Juns-g wants to merge 3 commits into
Conversation
|
I've read the whole thing, including the LG run and the screenshots, and it's careful work: the consent step, the 25 percent start, the health check that stops the tap when the route or format changes, and refusing a second start when cleanup can't be verified are the right calls for what a software attenuator can and can't promise. But I'm not taking it into Crisp, at least not now. Crisp's lane is talking to the monitor. Everything the volume row does today goes through the monitor's own controller over DDC, and the app never touches the audio stream. This changes that: it asks for the audio capture permission (the prompt says Crisp wants to record audio), keeps a tap running on the output, and its failure mode is the one you describe yourself, the attenuation vanishing on a quit, a crash, a sleep or an output change with the sound jumping to wherever the monitor sits. You handled each of those as well as it can be handled; it's the approach I don't want in a display app. It also puts a permanent row with a paragraph under it on every external display's card, a label over every volume slider, and a dialog in the panel, and the panel is meant to stay free of all three. For the monitors where DDC volume is dead, it stays the monitor's buttons or a dedicated audio app for now. I'm closing this, and I've put the idea on the roadmap in Backlog so it isn't lost; if it moves, this PR is where the work starts from. |
What & why
Add an opt-in, experimental software volume mode for external HDMI/DisplayPort outputs that do not expose usable hardware volume control. This uses public macOS 14.2+ Process Tap APIs without installing an audio driver; the app's minimum deployment target remains macOS 14.0.
Ready for review and maintainer merge consideration. The tester has confirmed the target-device core controls and accepted the final layout. CI passed on
a4485fc5591ab9190357eac03c9cbd06bf026001, and the contributor has requested removing Draft status. Broader validation boundaries below remain disclosed; acceptance on this setup is not a claim of exhaustive device/OS coverage. No automatic merge is requested.Included
Limits and safety
CLI follow-up (not included)
CLI audio-volume control is planned as a separate follow-up. Existing
crispctlbrightness commands do not control audio volume. No CLI commands or protocol changes are included here. Future CLI support should delegate to the same app-owned volume service and preserve explicit consent and lifecycle boundaries, rather than create another audio engine or silently enable capture. Command names and delivery timing are not finalized.How tested
Hands-on user acceptance (2026-09-07)
Build and static evidence
make checkwas rerun successfully on the final layout changes: strict lint, unit tests and official localization-key validation (exit 0).131bb14a5f8e7b3d6edb7da3845f5863269ead61plus the layout-only patch included in this PR update. Its frozen source snapshot was verified unchanged during the build.Remaining review / validation boundaries
a4485fc5591ab9190357eac03c9cbd06bf026001: build run.Accessibility-permission onboarding and a clearer reminder that software mode starts off after relaunch were noted as UX follow-ups; they are not implemented in this layout-only update.
Checklist
Crisp/Resources/Localizable.xcstringsfor new user-facing strings.