Choose audio devices #87

Merged
seb merged 17 commits from issue/15-audio-device-selection into main 2026-05-11 11:30:20 -07:00
Collaborator

Closes #15. Relies on #88 getting merged to main.

  • Implements UI and server-side selection of input/output device
  • Persists device selection to config.json
  • Implements UI for testing currently-selected audio devices + auto-mutes during the process
  • Cleanly unsubscribes+resubscribes the audio tracks when the devices change
  • Adds UI flow for testing currently-selected devices
  • Adds tagline when joined to a channel
Closes #15. Relies on #88 getting merged to main. - Implements UI and server-side selection of input/output device - Persists device selection to config.json - Implements UI for testing currently-selected audio devices + auto-mutes during the process - Cleanly unsubscribes+resubscribes the audio tracks when the devices change - Adds UI flow for testing currently-selected devices - Adds tagline when joined to a channel
seb force-pushed issue/15-audio-device-selection from a3a63620b5 to 0b760ff3d2 2026-04-11 08:52:30 -07:00 Compare
seb changed target branch from main to issue/8-mute-deafen 2026-04-11 08:56:38 -07:00
seb added this to the Laurence milestone 2026-04-11 08:58:19 -07:00
seb self-assigned this 2026-04-11 08:58:21 -07:00
seb removed their assignment 2026-04-11 08:58:25 -07:00
seb self-assigned this 2026-04-11 08:59:26 -07:00
Author
Collaborator

We need better names for the audio devices -- it just lists their categories, not their models.

We need better names for the audio devices -- it just lists their categories, not their models.
Author
Collaborator

We should give each device its own randomly-generated ID just in case they have the same name, atm the UI is broken if you have two devices with the same name.

We should give each device its own randomly-generated ID just in case they have the same name, atm the UI is broken if you have two devices with the same name.
seb force-pushed issue/15-audio-device-selection from f9cad86178 to 5d23b0b88e 2026-05-04 12:04:20 -07:00 Compare
seb changed target branch from issue/8-mute-deafen to main 2026-05-04 12:04:39 -07:00
- Extract a MuteEngine that owns the muted/deafened/pre-deafen-muted state
  and enforces the invariants (deafen implies mute, unmute implies undeafen,
  undeafen restores prior mute) in one place. Test commands now use a
  TestIsolationGuard whose Drop restores state and emits the state event,
  replacing the manual "save → force → restore → emit" dance duplicated
  across play_test_tone and test_microphone.
- Fix audio_state_changed payload: was a (bool, bool) tuple serialized as
  a JSON array, but the frontend reads it as { muted, deafened }. The
  engine emits a serde-tagged MuteSnapshot instead.
- Single source of truth for device labeling: id == name always; collisions
  get a "(N)" suffix in both. find_audio_device re-runs the labeling pass
  and does a linear search, so the dedup and lookup logic can never drift.
- AudioManager: clear stored device entry when the persisted device is
  unavailable instead of silently re-falling-back on every launch.
- set_input_device: skip when the requested device is already selected,
  matching set_output_device.
- Remove dead loopback code (commands, AudioManager fields, helper).
seb changed title from WIP: Choose audio devices to Choose audio devices 2026-05-06 14:38:17 -07:00
puregarlic approved these changes 2026-05-10 16:36:18 -07:00
puregarlic left a comment
Owner

LGTM... besides the LiveKit bug

LGTM... besides the LiveKit bug
seb merged commit 5dc506733a into main 2026-05-11 11:30:20 -07:00
seb referenced this pull request from a commit 2026-05-11 11:30:21 -07:00
seb referenced this pull request from a commit 2026-05-29 14:45:49 -07:00
Sign in to join this conversation.
No description provided.