# Audio Player
A composable audio player component built on media-chrome, with shadcn styling and flexible controls.
The `AudioPlayer` component provides a flexible and customizable audio playback interface built on top of media-chrome. It features a composable architecture that allows you to build audio experiences with custom controls, metadata display, and seamless integration with AI-generated audio content.
See `scripts/audio-player.tsx` for this example.
## Installation
```bash
npx ai-elements@latest add audio-player
```
## Features
- Built on media-chrome for reliable audio playback
- Fully composable architecture with granular control components
- ButtonGroup integration for cohesive control layout
- Individual control components (play, seek, volume, etc.)
- Flexible layout with customizable control bars
- CSS custom properties for deep theming
- Shadcn/ui Button component styling
- Responsive design that works across devices
- Full TypeScript support with proper types for all components
## Variants
### AI SDK Speech Result
The `AudioPlayer` component can be used to play audio from an AI SDK Speech Result.
See `scripts/audio-player.tsx` for this example.
### Remote Audio
The `AudioPlayer` component can be used to play remote audio files.
See `scripts/audio-player-remote.tsx` for this example.
## Props
### ``
Root MediaController component. Accepts all MediaController props except `audio` (which is set to `true` by default).
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `style` | `CSSProperties` | - | Custom CSS properties can be passed to override media-chrome theming variables. |
| `...props` | `Omit, ` | - | Any other props are spread to the MediaController component. |
### ``
The audio element that contains the media source. Accepts either a remote URL or AI SDK Speech Result data.
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `src` | `string` | - | The URL of the audio file to play (for remote audio). |
| `data` | `SpeechResult[` | - | AI SDK Speech Result audio data with base64 encoding (for AI-generated audio). |
| `...props` | `Omit`
Container for control buttons, wraps children in a ButtonGroup.
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `...props` | `React.ComponentProps` | - | Any other props are spread to the MediaControlBar component. |
### ``
Play/pause button wrapped in a shadcn Button component.
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `...props` | `React.ComponentProps` | - | Any other props are spread to the MediaPlayButton component. |
### ``
Seek backward button wrapped in a shadcn Button component.
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `seekOffset` | `number` | `10` | The number of seconds to seek backward. |
| `...props` | `React.ComponentProps` | - | Any other props are spread to the MediaSeekBackwardButton component. |
### ``
Seek forward button wrapped in a shadcn Button component.
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `seekOffset` | `number` | `10` | The number of seconds to seek forward. |
| `...props` | `React.ComponentProps` | - | Any other props are spread to the MediaSeekForwardButton component. |
### ``
Displays the current playback time, wrapped in ButtonGroupText.
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `...props` | `React.ComponentProps` | - | Any other props are spread to the MediaTimeDisplay component. |
### ``
Seek slider for controlling playback position, wrapped in ButtonGroupText.
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `...props` | `React.ComponentProps` | - | Any other props are spread to the MediaTimeRange component. |
### ``
Displays the total duration of the audio, wrapped in ButtonGroupText.
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `...props` | `React.ComponentProps` | - | Any other props are spread to the MediaDurationDisplay component. |
### ``
Mute/unmute button, wrapped in ButtonGroupText.
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `...props` | `React.ComponentProps` | - | Any other props are spread to the MediaMuteButton component. |
### ``
Volume slider control, wrapped in ButtonGroupText.
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `...props` | `React.ComponentProps` | - | Any other props are spread to the MediaVolumeRange component. |