Skip to main content
AudioField ← Back to Table of Contents

Summary

Compact audio player with waveform visualization, play/pause control, and optional loop. State is typically a URL string.
ClassBjanczak\FilamentFlexFields\Filament\Forms\Components\AudioField
State typestring|null — audio URL (when not using static src())
FieldTypeaudio

Basic usage

use Bjanczak\FilamentFlexFields\Filament\Forms\Components\AudioField;

AudioField::make('preview_url')
    ->label('Voice message')
    ->fullWidth()
    ->loop();

AudioField::make('jingle')
    ->src('/audio/notification.mp3')
    ->waveform([20, 45, 80, 60, 35, 90, 50, 30])
    ->size('lg');
Display-only (fixed source, state ignored):
AudioField::make('demo_track')
    ->src('https://cdn.example.com/demo.mp3')
    ->readOnly();

State format

ModeBehaviour
DefaultForm state string = audio URL
src() setStatic URL; resolveAudioSrc() prefers src() over state
EmptyNo playback; placeholder waveform shown

Validation

RuleDetail
nullableState may be empty
stringState must be string when present

Configuration API

src(string|Closure|null $src)

Fixed audio URL. When set, overrides state for playback.
AudioField::make('field_name')
    ->src('https://example.com/audio.mp3');

fullWidth(bool|Closure $condition = true)

Stretch player to container width. Default: false.
AudioField::make('field_name')
    ->fullWidth(true);

loop(bool|Closure $condition = true)

Loop playback. Default: false.
AudioField::make('field_name')
    ->loop(true);

waveform(array|Closure|null $waveform)

Custom peak heights 8100. When omitted, waveform is generated from URL fingerprint or placeholder.
->waveform([30, 70, 45, 90, 55, 40, 75, 50])

playIcon() / pauseIcon()

Custom play/pause icons.
AudioField::make('field_name')
    ->playIcon('heroicon-o-play')
    ->pauseIcon('heroicon-o-pause');

size(string|ControlSize|Closure $size)

sm, md, lg. Default: md.
AudioField::make('field_name')
    ->size('md');

readOnly(bool|Closure $condition = true)

Disable interaction.
AudioField::make('field_name')
    ->readOnly(true);

Public helper methods

MethodReturnsDescription
getSrc()string|nullStatic src
isFullWidth()boolFull width layout
shouldLoop()boolLoop enabled
resolveAudioSrc(mixed $state)string|nullEffective URL
hasCustomWaveform()boolCustom peaks configured
getWaveform()list<int>Normalized peaks
resolveWaveform(mixed $state)list<int>Peaks for display
getPlayIcon() / getPauseIcon()string|BackedEnum|HtmlableIcons
getWrapperClasses()list<string>fff-audio-field-field

FlexField schema config

Config keyMaps to
sizesize()
full_widthfullWidth()
srcsrc()
looploop()
waveformwaveform()

CSS classes

ClassRole
fff-audio-field-fieldRoot wrapper
fff-audio-field-field--{sm|md|lg}Size modifier
fff-audio-field__waveformWaveform bars
fff-audio-field__playPlay/pause button

Implementation notes

  • Waveform without custom peaks uses AudioWaveformGenerator::fromFingerprint($url) for stable visuals per URL.
  • Non-numeric waveform values throw InvalidArgumentException.