import { For } from "solid-js"; import { useMediaDeviceSelect } from "solid-livekit-components"; import { Trans, useLingui } from "@lingui-solid/solid/macro"; import { useState } from "@revolt/state"; import { Checkbox, Column, Slider, Text } from "@revolt/ui"; import { CategoryButton, CategoryCollapse, } from "@revolt/ui/components/design/CategoryButton"; import { Symbol } from "@revolt/ui/components/utils/Symbol"; /** * Input options */ export function VoiceInputOptions() { return ( ); } /** * Select audio input */ function SelectMicrophone() { const { t } = useLingui(); const state = useState(); const { activeDeviceId, devices, setActiveMediaDevice } = useMediaDeviceSelect({ kind: "audioinput", }); const activeId = () => (activeDeviceId() === "default" ? state.voice.preferredAudioInputDevice : undefined) ?? activeDeviceId(); const description = () => devices().find((device) => device.deviceId === activeId())?.label ?? t`Using default microphone`; return ( mic} title={Select audio input} description={description()} scrollable > {(device) => ( } onClick={() => { state.voice.preferredAudioInputDevice = device.deviceId; setActiveMediaDevice(device.deviceId); }} > {device.label} )} ); } /** * Select audio output */ function SelectSpeaker() { const { t } = useLingui(); const state = useState(); const { activeDeviceId, devices, setActiveMediaDevice } = useMediaDeviceSelect({ kind: "audiooutput", }); const activeId = () => (activeDeviceId() === "default" ? state.voice.preferredAudioOutputDevice : undefined) ?? activeDeviceId(); const description = () => devices().find((device) => device.deviceId === activeId())?.label ?? t`Using default speaker`; return ( speaker} title={Select audio output} description={description()} scrollable > {(device) => ( } onClick={() => { state.voice.preferredAudioOutputDevice = device.deviceId; setActiveMediaDevice(device.deviceId); }} > {device.label} )} ); } /** * Select volume */ function VolumeSliders() { const state = useState(); return ( Output Volume (state.voice.outputVolume = event.currentTarget.value) } labelFormatter={(label) => (label * 100).toFixed(0) + "%"} /> ); }