KQ-907 · VOICE/WAVE/ROW

Voice Row

Who is talking, read off the waves. Each row's strip is driven entirely by the levels the host passes — there is no microphone here — with a fixed per-person profile so a voice keeps its shape, and the bars track the level on flick while silent rows flatten to a hairline. The loudest voice above the threshold takes the turn: its name lifts and turns cobalt on snap. Down and Up step the rows, Home and End jump, and Enter pins a row so its strip grows and holds contrast while others speak.

KQ-907 · VOICE/WAVE/ROW
Coldbrook dispatch3 on the call

nobody speaking · pinned nothing

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/voice-wave-row

Props

participants
VoiceParticipant[]
default
The people on the call as { id, name, muted? }, in the caller's order.
levels
Record<string, number>
default
Level 0–1 per id, from the host; a missing id sits at zero.
threshold
number
default 0.12
Level at or above which a row counts as speaking.
bars
number
default 12
Bars per strip.
pinnedId / defaultPinnedId
string | null
default null
The pinned row, controlled or initial.
onPinnedChange
(id: string | null) => void
default
Fires as a row is pinned or unpinned.
onSpeakerChange
(sentence: string) => void
default
Fires once per frozen change sentence, such as "Marta Ferreira is speaking".
label
string
default
Names the row list for assistive technology.