audiocn

Audio Device Select

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

Installation

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

Usage

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

<AudioDeviceSelect
  devices={devices}
  onRequestPermission={requestPermission}
  onValueChange={setDeviceId}
  permission={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 children to render items yourself with AudioDeviceSelectItem.

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