Audio and SFX
Visuals that move with the sound, and thirty CC0 sound effects.
Two ways to move with sound
You know the tempo. use-beat is pure math: no file is read, and the result is identical on every render.
const { pulse, beat } = useBeat({ bpm: 120 });
<div style={{ scale: String(1 + pulse * 0.2) }}>{beat}</div>You do not. The visualisers read the audio itself and follow whatever is there, speech included.
<Waveform src={staticFile("episode.mp3")} variant="mirror" bars={64} />
<Spectrum src={staticFile("track.mp3")} />
<RadialVisualizer src={staticFile("track.mp3")} />
<SpeakerCard src={staticFile("episode.mp3")} name="Ada Lovelace" />
<AudioReactive src={staticFile("track.mp3")} effect="both">…</AudioReactive>They load only the audio around the current frame, so an hour-long podcast is as fast as a jingle. While it loads, each one renders its resting state instead of jumping.
Sound effects
Thirty CC0 sounds, all generated by reelcn, so there is nothing to attribute:
npx shadcn@latest add https://www.reelcn.dev/r/sfx.json<Sequence from={30}>
<Sfx name="whoosh" />
</Sequence>A sound plays at the start of the Sequence it sits in. Nest <Sfx> inside a <Sequence> or <Series> at the frame you want the sound to land.
By default the sounds stream from www.reelcn.dev. For offline renders or CI, pull them into your project:
npx shadcn@latest add https://www.reelcn.dev/r/sfx-pull.json
node scripts/reelcn-sfx-pull.tsThat copies the pack into public/reelcn/sfx/ and flips SFX_LOCAL in your sfx.tsx, so nothing reaches the network at render time.
The full list
bell, bubble, camera-shutter, chime, click, click-soft, coin, ding, drop, error, glitch, impact, keypress, notification, pop, pop-high, rise, riser-short, sparkle, success, swipe, swish, swoosh, tap, thud, tick, transition-hit, typing, whoosh, whoosh-soft.