Real sounds for real interfaces. No synthesis.
SoundWeaver is a richly labeled library of 52 pre-rendered UI sound effects — clicks, toggles,
success, error, notifications, rewards — plus a drop-in React hook or a framework-agnostic
manager. Every sound plays through HTMLAudioElement. Nothing is generated at runtime.
Every sound, grouped by category
Hover or focus a tile to preload it, click (or press Enter) to play the real file. Nothing loads until you touch it.
Why SoundWeaver
Built so audio UX stops being the thing every project skips.
Real audio only, by design
Every sound is pre-rendered offline into an ordinary WAV file and played back with HTMLAudioElement. No Tone.js, no Web Audio oscillators, no AI audio generated at runtime — so playback is instant, predictable, and free of browser audio-policy surprises.
52 richly labeled sounds
Tone, character, intensity, duration, and feeling for every sound — enough to pick the right one for a checkout button versus a destructive-delete confirm.
Drop-in integration
A React SoundProvider + useSound hook, or a framework-agnostic SoundManager for vanilla JS. Both ship volume control and a mute toggle out of the box.
Accessible by default
Global mute, per-sound volume, master volume, prefers-reduced-motion respected, preferences persisted to localStorage.
Self-contained
Real WAV files ship alongside an inline base64 SOUND_MAP, so there are no missing-file or hosting problems — it cannot 404.
MIT licensed
Use it commercially, swap in your own recorded CC0 files (Kenney, Material) any time — just replace the file and relabel it.
Drop it in
The real integration code — copy what fits your stack.
import { SoundProvider, useSound, useSoundControls } from "./assets/useSound.jsx";
import { SOUND_MAP, VOLUME_MAP } from "./assets/sounds.inline.js";
function App() {
return (
<SoundProvider soundMap={SOUND_MAP} volumeMap={VOLUME_MAP} defaultVolume={0.5}>
<PayButton />
</SoundProvider>
);
}
function PayButton() {
const click = useSound("click-crisp-primary");
const success = useSound("success-warm-chime");
const error = useSound("error-soft-thud");
return (
<button onClick={async () => { click(); (await submit()) ? success() : error(); }}>
Pay now
</button>
);
}
function SoundSettings() {
const { masterVolume, setMasterVolume, muted, toggleMute } = useSoundControls();
return (
<>
<button onClick={toggleMute} aria-pressed={muted}>{muted ? "Unmute" : "Mute"}</button>
<input type="range" min="0" max="1" step="0.05" value={masterVolume}
aria-label="Sound volume"
onChange={(e) => setMasterVolume(Number(e.target.value))} />
</>
);
}
import { SoundManager } from "./assets/soundManager.js";
import { SOUND_MAP, VOLUME_MAP } from "./assets/sounds.inline.js";
const sfx = new SoundManager({ sounds: SOUND_MAP, volumes: VOLUME_MAP, volume: 0.5 });
saveBtn.addEventListener("click", () => sfx.play("success-subtle-ping"));
muteBtn.addEventListener("click", () => {
const muted = sfx.toggleMute();
muteBtn.setAttribute("aria-pressed", muted);
});
volumeSlider.addEventListener("input", (e) => sfx.setVolume(Number(e.target.value)));
Install
Add it as a Claude Code plugin, or clone the repo directly.
As a Claude Code plugin
/plugin marketplace add uaredumb/SoundWeaver
/plugin install soundweaver@uaredumb
Clone the repo
git clone https://github.com/uaredumb/SoundWeaver.git