zed/crates/livekit_client/src
Jakub Konka e7926480dd
settings: Add ability to select audio input/output devices for collab (#49015)
This PR adds ability to select and test audio input/output devices for
use in collaboration setting (which is what the team at Zed relies
heavily on). Currently, we only ever used whatever the system default is
and it worked well until it didn't - for some reason, when I am on my
Linux laptop, I am unable to force Zed to use my external mic +
headphones via external USB audio interface. With this PR, now I can
list all available devices and select the one I want.

There are still a couple of caveats that we should be aware of:
* I've decided to list *all* available devices meaning on Linux it is
quite possible that you may discover that what your desktop environment
is reporting to you is a significantly shorter list than what your sound
framework/hw is actually exposing. I think this makes sense given my
inexperience with audio drivers/devices and frameworks on various OSes
so that we get full control over what is available with the goal of
being able to come up with some filtering heuristic as we go along.
* We currently populate the list of available audio devices only once at
startup meaning if you unplug your device while you have Zed running
this will not register until you restart Zed which is a PITA. However,
in order to keep the changes manageable I thought it would be best to do
minimal work in this regard now, and iterate on this some more in the
near future. After all, we don't really monitor device changes on any
platform except macOS anyhow, so it might be the case that when I get
round to implementing this I will have the opportunity to tackle both at
the same time.
* In order to get a valid list of all audio devices using `cpal` crate
(which is the building block of `rodio`), I had to bump `cpal` to 0.17,
and pin `rodio` to a more recent commit sha as a result, so if you see
any regressions, lemme know and/or feel free to revert this PR.
* Finally, I've done my best to integrate this with the settings UI, but
I am sure more could be done in terms of styling, etc.

Some screenshots:

<img width="1152" height="949" alt="Screenshot From 2026-02-12 11-40-04"
src="https://github.com/user-attachments/assets/e147c153-1902-49d6-bf68-3ac317a6a7b0"
/>
<img width="1152" height="949" alt="Screenshot From 2026-02-12 11-40-16"
src="https://github.com/user-attachments/assets/b4e9a2f8-b38e-4de0-b910-067cc432b5bc"
/>


Release Notes:

- Added ability to select audio input/output devices as part of
Collaboration page in Settings. Added ability to test selected devices
with a simple playback loop routing input directly into output for
easier debugging of your audio devices.

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
2026-02-12 14:27:55 +01:00
..
livekit_client settings: Add ability to select audio input/output devices for collab (#49015) 2026-02-12 14:27:55 +01:00
mock_client Re-add TestScreenCaptureStream implementation for mock_client to fix FreeBSD and MinGW builds (#35191) 2025-07-28 14:02:48 +02:00
lib.rs livekit_client: Do not encode video frames on the main thread (#46986) 2026-01-16 13:25:55 +00:00
livekit_client.rs gpui: Actually remove the Result from AsyncApp (#45809) 2026-01-07 12:48:24 -08:00
mock_client.rs livekit_client: Do not encode video frames on the main thread (#46986) 2026-01-16 13:25:55 +00:00
record.rs settings: Add ability to select audio input/output devices for collab (#49015) 2026-02-12 14:27:55 +01:00
remote_video_track_view.rs livekit_client: Do not encode video frames on the main thread (#46986) 2026-01-16 13:25:55 +00:00
test.rs collab: Add action to copy room id (#44004) 2025-12-02 16:27:36 +00:00