Bar Visualizer

PreviousNext

Real-time audio frequency visualizer with state-based animations for voice agents and audio interfaces.

Installation

pnpm dlx @elevenlabs/agents-cli@latest components add bar-visualizer

Usage

import {
  BarVisualizer,
  useAudioVolume,
  useBarAnimator,
  useMultibandVolume,
  type AgentState,
  type AudioAnalyserOptions,
  type BarVisualizerProps,
  type MultiBandVolumeOptions,
} from "@/components/ui/bar-visualizer"

Basic Visualizer

<BarVisualizer state="listening" barCount={15} mediaStream={stream} />

Demo Mode

<BarVisualizer state="speaking" demo={true} centerAlign={true} />

API Reference

BarVisualizer

The main visualizer component that displays animated frequency bars.

<BarVisualizer state="speaking" mediaStream={stream} />

Props

PropTypeDescription
stateAgentStateVoice assistant state: connecting, initializing, listening, speaking, thinking
barCountnumberNumber of bars to display. Default: 15
mediaStreamMediaStreamAudio source for real-time visualization
minHeightnumberMinimum bar height as percentage. Default: 20
maxHeightnumberMaximum bar height as percentage. Default: 100
demobooleanEnable demo mode with fake audio data. Default: false
centerAlignbooleanAlign bars from center instead of bottom. Default: false
...propsHTMLDivElementAll standard div element props

useAudioVolume Hook

Get the overall volume level from an audio stream.

const volume = useAudioVolume(mediaStream, {
  fftSize: 32,
  smoothingTimeConstant: 0,
})

Parameters

ParameterTypeDescription
mediaStreamMediaStream | nullThe audio stream to analyze
optionsAudioAnalyserOptionsFFT size, smoothing, and dB range

useMultibandVolume Hook

Track volume across multiple frequency bands for visualization.

const frequencyBands = useMultibandVolume(mediaStream, {
  bands: 15,
  loPass: 100,
  hiPass: 200,
  updateInterval: 32,
})

Parameters

ParameterTypeDescription
mediaStreamMediaStream | nullThe audio stream to analyze
optionsMultiBandVolumeOptionsBand count, frequency range, interval

useBarAnimator Hook

Create animation sequences for different states.

const highlightedIndices = useBarAnimator("connecting", 15, 100)

Parameters

ParameterTypeDescription
stateAnimationStateCurrent animation state
columnsnumberNumber of bars
intervalnumberAnimation frame interval in ms

AgentState Type

type AgentState =
  | "connecting" // Establishing connection
  | "initializing" // Setting up
  | "listening" // Listening for input
  | "speaking" // Playing audio output
  | "thinking" // Processing

Notes

  • Uses Web Audio API for real-time frequency analysis
  • Supports both real audio streams and demo mode for development
  • Bars animate based on the current state
  • FFT analysis splits audio into frequency bands
  • Smooth animations using requestAnimationFrame
  • Works with any MediaStream source (microphone, audio elements, WebRTC)