Audio Playback Speed

PreviousNext

Control playback speed with a dropdown menu selector.

Documentation

Dropdown button for adjusting playback speed (0.5x–2x). Auto-disabled for live streams with contextual tooltip. Shows current speed and visual feedback.

Installation

pnpm dlx shadcn@latest add @audio/playback-speed

Usage

import { AudioPlaybackSpeed } from "@/components/audio/playback-speed";

Basic

<AudioPlaybackSpeed />

Icon Style

With size="icon", only the speed label is shown (no gauge icon):

<AudioPlaybackSpeed size="icon" variant="ghost" />

Custom Speeds

<AudioPlaybackSpeed
  speeds={[
    { value: 0.5, label: "0.5x" },
    { value: 1, label: "1x" },
    { value: 1.5, label: "1.5x" },
    { value: 2, label: "2x" },
  ]}
/>

API Reference

AudioPlaybackSpeed

Props

PropTypeDefaultDescription
speedsreadonly { value: number; label: string }[]PLAYBACK_SPEEDSSpeed options array. Default: 0.5x, 0.75x, 1x, 1.25x, 1.5x, 2x
sizeButtonSize-Button size. "icon" hides gauge icon.
variantButtonVariant"outline"Button variant.
classNamestring-Additional CSS classes.

Features

  • Live streams: Auto-disabled with "Not available for live streams" tooltip
  • Persistence: Speed saved to localStorage, restored on reload
  • Visual feedback: Current speed displayed, checkmark in dropdown
  • Tooltip: Always enabled, works on disabled buttons
  • Icon mode: size="icon" hides gauge icon, shows only label

Requires AudioProvider or audio store. Speed persists via localStorage.

Examples

In Player

<AudioPlayer>
  <AudioPlayerControlBar>
    <AudioPlayerControlGroup>
      <AudioPlayerPlay />
      <AudioPlayerSeekBar />
    </AudioPlayerControlGroup>
    <AudioPlayerControlGroup>
      <AudioPlaybackSpeed />
      <AudioPlayerVolume />
    </AudioPlayerControlGroup>
  </AudioPlayerControlBar>
</AudioPlayer>

Custom Labels

<AudioPlaybackSpeed
  speeds={[
    { value: 0.75, label: "Slow" },
    { value: 1, label: "Normal" },
    { value: 1.5, label: "Fast" },
  ]}
/>

Changelog

2025-12-24 useAudio integration and live stream improvements

  • Changed: Now uses useAudio() hook to access htmlAudio singleton
  • Improved: Live stream detection uses htmlAudio.isLive() method
  • Fixed: Playback rate changes are properly prevented for live streams

Last updated 12/24/2025