Ballmac UI home

Audio Player

A podcast-style audio player: play and pause, skip back and forward, a scrubber with chapter ticks, a named current chapter and a speed control. Works with a real file or as a silent demo.

42

Episode 42: The Optimised Life

Slow Burn · 41 min

Chapter: Cold open

0:00−41:00

Installation

$ pnpm dlx shadcn@latest add @ballmac/audio-player

Usage

import { AudioPlayer, formatTime } from "@/components/ballmac/audio-player"

The full example is in the Code tab above.

Examples

Compact mini player

Weekly update: October 1

0:00−5:12

Position: 0 seconds

API reference

PropTypeDefault
src

Audio file URL. Leave it out for a silent demo that advances a clock, so you can design the page before the audio exists.

string—
title*

Episode or track title.

string—
subtitle

Show or artist, shown under the title.

string—
duration

Length in seconds. Used before the file's metadata loads, and as the length of a silent demo.

number—
chapters

Chapters. Drawn as ticks on the scrubber, and the current one is named under the title.

AudioChapter[][]
artwork

Artwork shown on the left.

React.ReactNode—
rates

Playback speeds the speed button cycles through.

number[][1, 1.25, 1.5, 2, 0.75]
skip

Seconds the back and forward buttons skip.

{ back: number; forward: number }{ back: 15, forward: 30 }
time

Controlled position in seconds.

number—
onTimeChange

Called when the position changes (playback, seeking or skipping).

(seconds: number) => void—
onPlayingChange

Called when play or pause is chosen.

(playing: boolean) => void—
variant

"compact" is a single row, for a sticky mini player.

"default" | "compact""default"
back*number—
forward*number—

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
Space / Enter on PlayPlays or pauses; the name switches between Play and Pause
Arrow keys on the scrubberSeeks one second; Page Up / Down seeks more; the value reads as 'm:ss of m:ss'
Skip buttonsJump back or forward by the configured seconds

Use with AI

Pass src (omit it for a silent demo), title, duration and optional chapters=[{ start, title }]. Control the position with time and onTimeChange to sync a transcript. variant='compact' is a one-row mini player. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Audio Player (@ballmac/audio-player) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Podcast episodes, audio articles, voice notes and music previews
  • Syncing a transcript or chapter list to playback

Not for

  • Video (use the native video element or video-dialog)

Registry JSON: https://ui.ballmac.com/r/audio-player.json

Credits

Free to use in personal and commercial projects.