audiocnSolid

Audio Device Select

A microphone, speaker or source picker with permission, loading and disconnected states.

Installation

$ pnpm dlx shadcn@latest add @audiocn-solid/audio-device-select

Usage

import { AudioDeviceSelect } from "@/components/ui/audio-device-select";
const audio = useAudioDevices();

<AudioDeviceSelect
  devices={audio.devices}
  onRequestPermission={audio.requestPermission}
  onValueChange={setDeviceId}
  permission={audio.permission === "unsupported" ? "denied" : audio.permission}
  value={deviceId()}
/>;

Devices come in as a prop, so the select works with useAudioDevices or with any device list, such as one from a native backend.

Anatomy

<AudioDeviceSelect devices={devices}>
  <AudioDeviceSelectTrigger>
    <AudioDeviceSelectValue placeholder="Select a microphone" />
  </AudioDeviceSelectTrigger>
  <AudioDeviceSelectContent />
  <AudioDeviceSelectPreview>
    <LiveWaveform source={analyser.visual} />
  </AudioDeviceSelectPreview>
</AudioDeviceSelect>

AudioDeviceSelectContent renders one item per device. Pass a Select.Listbox item renderer to render AudioDeviceSelectItem yourself.

Examples

States

Selected device, a "None" option, a device that was unplugged, and loading.

Behaviour

  • A selected device that disappears is kept and shown as "(disconnected)", so the selection is never lost silently.
  • Devices with status unavailable or permission-required are disabled.
  • The default device is marked.

Theming

Data attributeOnMeaning
data-loadingtriggerDevices are loading
data-permissiontriggergranted, prompt or denied
data-missingtriggerThe selected device is gone

API reference

Prop

Type