Skip to content

[Feature]: Select microphones from Talk control and centralize voice settings #101046

Description

@steipete

Summary

Move Control UI realtime voice configuration into Settings and let users choose any browser audio input from the microphone caret.

Problem to solve

The chat composer currently duplicates Voice, Model, and Sensitivity overrides in a wide Talk-options panel even though the canonical realtime Talk configuration already lives in Settings → Communications → Talk. The microphone caret also cannot select among built-in, USB, Bluetooth, or virtual audio inputs, so Talk always captures the browser's default microphone.

Proposed solution

  • Remove Voice, Model, and Sensitivity overrides from the composer caret so Settings remains the sole owner of realtime voice configuration.
  • Populate the microphone caret with every browser-visible audioinput, plus System default.
  • Request microphone permission from the caret gesture when needed, stop the short permission stream immediately, and refresh the device list.
  • Remember the selected device browser-locally and apply it to every Control UI realtime transport without sending the device identifier to the Gateway.
  • Preserve each transport's existing audio-processing constraints and surface unavailable/denied-device states without silently selecting a different explicit microphone.

Alternatives considered

  • Keep the existing composer overrides and add a fourth field for microphone selection. This preserves duplicate voice-setting ownership and the oversized panel.
  • Add microphone selection to Gateway config. Browser device identifiers are origin-local hardware state and do not belong in shared Gateway configuration or RPC payloads.
  • Rely on the browser/system default. This does not support users with multiple physical or virtual inputs.

Impact

Affected: Control UI users running realtime Talk with multiple microphones or virtual audio devices.

Severity: Medium usability problem; users cannot direct Talk to the intended input and must change their operating-system default.

Frequency: Every Talk session where the desired input is not the system default.

Consequence: Wrong-device capture, failed or silent voice sessions, and duplicated voice configuration between the composer and Settings.

Evidence/examples

The current composer caret renders Voice, Model, Sensitivity, and “More in Settings” but has no audio-input selector. Current browser capture paths all call getUserMedia with the default microphone.

Additional information

The selected browser device ID must stay local to the Control UI. talk.client.create rejects unknown properties, and device IDs are origin-scoped browser state.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Normal backlog priority with limited blast radius.clawsweeper:needs-infoClawSweeper needs more reporter information before it can verify this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.enhancementNew feature or requestimpact:ux-frictionUser-facing flow adds avoidable confusion or support burden without fully blocking progress.issue-rating: 🦪 silver shellfishThin issue quality; more reproduction proof or environment detail is needed.maintainerMaintainer-authored PR

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions