Voice mode orb

음성 모드 오브

A soft blob that ripples with audio amplitude, showing — without any text — whether it's listening or speaking.

Also known as: Audio-reactive blobVoice assistant visualizer
···
html
<div class="stage">
  <svg viewBox="0 0 200 200" width="150" height="150">
    <defs>
      <radialGradient id="og" cx="42%" cy="38%" r="70%">
        <stop offset="0%" stop-color="#8f8fff"/>
        <stop offset="60%" stop-color="#5b5bf7"/>
        <stop offset="100%" stop-color="#3a3ad6"/>
      </radialGradient>
    </defs>
    <path id="blob" fill="url(#og)"/>
  </svg>
  <span class="lbl" id="lbl">듣는 중</span>
</div>
css
.stage{display:grid;place-items:center;gap:10px}
.lbl{font-size:11px;color:var(--muted);letter-spacing:.02em}
js
const blob = document.getElementById('blob'), lbl = document.getElementById('lbl');
const N = 10;
let t = 0, mode = 'listen';
const modes = { listen: { amp: 6, speed: .035 }, think: { amp: 3, speed: .02 }, speak: { amp: 14, speed: .07 } };
function path(amp) {
  const pts = [];
  for (let i = 0; i < N; i++) {
    const a = (i / N) * Math.PI * 2;
    const n = Math.sin(a * 3 + t) * amp + Math.sin(a * 5 - t * 1.7) * amp * 0.4;
    const r = 70 + n;
    pts.push([100 + Math.cos(a) * r, 100 + Math.sin(a) * r]);
  }
  let d = 'M ' + pts[0][0] + ' ' + pts[0][1] + ' ';
  for (let i = 0; i < N; i++) {
    const [cx, cy] = pts[i];
    const [nx, ny] = pts[(i + 1) % N];
    d += 'Q ' + cx + ' ' + cy + ' ' + (cx + nx) / 2 + ' ' + (cy + ny) / 2 + ' ';
  }
  return d + 'Z';
}
function frame() {
  const m = modes[mode];
  t += m.speed;
  blob.setAttribute('d', path(m.amp));
  requestAnimationFrame(frame);
}
frame();
const order = ['listen', 'think', 'speak'];
const labels = { listen: '듣는 중', think: '생각하는 중', speak: '말하는 중' };
let idx = 0;
setInterval(() => { idx = (idx + 1) % order.length; mode = order[idx]; lbl.textContent = labels[mode]; }, 1800);

Voice conversations may have no text on screen at all, so the current state — listening, thinking, speaking — has to come through in shape and motion alone. The orb is usually an SVG blob or layered circles whose size and contour shift in real time with audio amplitude (either live mic input or the level of audio being played back), so the sound and the motion feel synced to the same rhythm.

Three states are typically distinguished by form or color: listening is calm and reacts to the user's voice level; thinking idles with a slow self-rotation while nothing external is driving it; speaking ripples larger and faster, keyed to the AI's own voice waveform. Since this transition is often the only signal of a state change, it needs to read clearly.

When mocking this up without real audio data, synthesizing a few sine waves as a stand-in for amplitude is enough — though a perfectly regular waveform looks mechanical, so mixing in a bit of noise or phase offset makes it read as more natural.

When to use

Use it for voice-first interfaces, or when the screen is too small for text. In a screen dominated by text chat, it rarely does more than decorate.