mic-selector-demo
elevenlabs/mic-selector-demoFreeExample
shadcn/ui publishes no description for this item.
Install it
npx shadcn@latest add https://raw.githubusercontent.com/elevenlabs/ui/main/apps/www/public/r/mic-selector-demo.jsonSource
1"use client"23import { useCallback, useEffect, useRef, useState } from "react"4import { Disc, Pause, Play, Trash2 } from "lucide-react"56import { cn } from "@/lib/utils"7import { Button } from "@/components/ui/button"8import { Card } from "@/components/ui/card"9import { LiveWaveform } from "@/components/ui/live-waveform"10import { MicSelector } from "@/components/ui/mic-selector"11import { Separator } from "@/components/ui/separator"1213type RecordingState = "idle" | "loading" | "recording" | "recorded" | "playing"1415export default function MicSelectorDemo() {16 const [selectedDevice, setSelectedDevice] = useState<string>("")17 const [isMuted, setIsMuted] = useState(false)18 const [state, setState] = useState<RecordingState>("idle")19 const [audioBlob, setAudioBlob] = useState<Blob | null>(null)2021 const mediaRecorderRef = useRef<MediaRecorder | null>(null)22 const audioChunksRef = useRef<Blob[]>([])23 const audioElementRef = useRef<HTMLAudioElement | null>(null)2425 const startRecording = useCallback(async () => {26 try {27 setState("loading")2829 const stream = await navigator.mediaDevices.getUserMedia({30 audio: selectedDevice ? { deviceId: { exact: selectedDevice } } : true,31 })3233 const mediaRecorder = new MediaRecorder(stream)34 mediaRecorderRef.current = mediaRecorder35 audioChunksRef.current = []3637 mediaRecorder.ondataavailable = (event) => {38 if (event.data.size > 0) {39 audioChunksRef.current.push(event.data)40 }41 }4243 mediaRecorder.onstop = () => {44 const blob = new Blob(audioChunksRef.current, { type: "audio/webm" })45 setAudioBlob(blob)46 stream.getTracks().forEach((track) => track.stop())47 setState("recorded")48 }4950 mediaRecorder.start()51 setState("recording")52 } catch (error) {53 console.error("Error starting recording:", error)54 setState("idle")55 }56 }, [selectedDevice])5758 const stopRecording = useCallback(() => {59 if (mediaRecorderRef.current && state === "recording") {60 mediaRecorderRef.current.stop()61 }62 }, [state])6364 const playRecording = useCallback(() => {65 if (!audioBlob) return6667 const audio = new Audio(URL.createObjectURL(audioBlob))68 audioElementRef.current = audio6970 audio.onended = () => {71 setState("recorded")72 }7374 audio.play()75 setState("playing")76 }, [audioBlob])7778 const pausePlayback = useCallback(() => {79 if (audioElementRef.current) {80// … truncated
What it pulls in
Other registry items
Files it writes
More from shadcn/ui
All 50 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| audio-player-demoaudio-player-demo | shadcn/ui | Examples | Free | no deps | |
| bar-visualizer-demobar-visualizer-demo | shadcn/ui | Examples | Free | no deps | |
| conversation-bar-democonversation-bar-demo | shadcn/ui | Examples | Free | no deps | |
| conversation-democonversation-demo | shadcn/ui | Examples | Free | no deps | |
| live-waveform-demolive-waveform-demo | shadcn/ui | Examples | Free | no deps | |
| matrix-demomatrix-demo | shadcn/ui | Examples | Free | no deps | |
| message-demomessage-demo | shadcn/ui | Examples | Free | no deps | |
| orb-demoorb-demo | shadcn/ui | Examples | Free | no deps |
