roblox-audio — Claude Code skill for Roblox sound
A skill for Roblox audio work: playback, 3D sound, music, effects and mixing through SoundGroups.
npx skills add TabooHarmony/roblox-brain --skill roblox-audio -a claude-codeWhat roblox-audio does
The skill loads when you add, change or fix Roblox audio: background music, sound effects, spatial sound, mixing and dynamic effects. It also covers the annoying cases — a sound that won't play, sits too loud or quiet, or loops when it shouldn't.
Inside is a quick reference for both systems. The legacy one on Sound, SoundGroup and SoundEffect is simpler; the modular one on AudioPlayer, AudioEmitter and Wire is what the author recommends for new projects, since voice chat requires it. Snippets cover setting up a Sound with RollOffMode and distances, one-shot effects that call Destroy() after Ended, and preloading with ContentProvider:PreloadAsync.
Pitfalls are spelled out. Server sounds carry latency, so play feedback on the client. RollOffMaxDistance defaults to 10000 studs, so set it yourself. Volume above 1 clips. Detailed examples and an effect table live in references/full.md.
What it helps with
- give music its own volume slider separate from effects
- make 3D sound fade correctly with distance
- fix a sound that never plays or loops wrong
- duck music under a gunshot with side-chain compression
- play a short effect on the client without server latency
Example prompts for the agent
- add background music through a SoundGroup so players can adjust music and SFX volume separately
- the gunshot sound is inaudible near the player — check RollOffMinDistance and RollOffMaxDistance
- play a one-shot sound on the client via RemoteEvent to avoid the delay
How to install roblox-audio
1Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-audio -a claude-code2Manually: put the files in place
~/.claude/skills/roblox-audio/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/roblox-audio/
1Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-audio -a codex2Manually: put the files in place
.agents/skills/roblox-audio/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-audio -a cursor2Manually: put the files in place
.cursor/skills/roblox-audio/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install TabooHarmony/roblox-brain roblox-audio2Manually: put the files in place
.github/skills/roblox-audio/SKILL.md1Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-audio -a gemini-cli2Platform CLI
gemini skills install https://github.com/TabooHarmony/roblox-brain --path skills/gameplay/roblox-audioManually: put the files in place
.devin/skills/roblox-audio/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-audio -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about roblox-audio
How do I install roblox-audio in Claude?
Run npx skills add TabooHarmony/roblox-brain --skill roblox-audio -a claude-code. The skill lands at ~/.claude/skills/roblox-audio/SKILL.md.
What does roblox-audio do?
It tells the agent how to handle Roblox audio properly: playback, spatial sound, music, effects, SoundGroups and dynamic effects. It also helps when a sound won't play or behaves oddly.
How is the legacy audio system different from the modular one?
Legacy uses Sound and SoundGroup and is simpler to set up. The modular system with AudioPlayer, AudioEmitter and Wire is recommended for new projects and required for voice chat.
Source text
SKILL.md · MIT
---
name: roblox-audio
description: "Use when adding, changing, or fixing Roblox audio: playback, spatial sound, music, sound effects, SoundGroups, or dynamic effects."
when_to_use: "Also when a sound doesn't play, is too loud or quiet, overlaps or loops wrongly, volume settings, and auditing audio assets or mixes."
last_reviewed: 2026-10-14
sources:
- https://create.roblox.com/docs/reference/engine/classes/SoundService
- https://create.roblox.com/docs/audio/objects
- https://create.roblox.com/docs/audio/effects
- https://create.roblox.com/docs/sound/groups
- https://create.roblox.com/docs/sound/dynamic-effects
- original
- https://raw.githubusercontent.com/Roblox/creator-docs/main/content/en-us/reference/engine/classes/Sound.yaml
---
# Roblox Audio
## When to Load
Load when implementing audio playback, spatial/3D sound, background music, sound effects, audio mixing (SoundGroups), or dynamic effects. Covers both legacy Sound objects and the newer modular AudioPlayer/Wire system.
## Quick Reference
**Two Systems**: Legacy (`Sound`/`SoundGroup`/`SoundEffect`): simpler. New modular (`AudioPlayer`/`AudioEmitter`/`Wire`/`AudioDeviceOutput`): preferred for new projects, required for voice chat.
**Sound Placement**: BasePart child → volumetric. Attachment/MeshPart → point source. SoundService/Workspace → global (BGM/UI).
**Legacy Setup**:
```luau
local s = Instance.new("Sound")
s.SoundId = "rbxassetid://ID"; s.Looped = true; s.Volume = 0.25
s.RollOffMode = Enum.RollOffMode.InverseTapered
s.RollOffMinDistance = 10; s.RollOffMaxDistance = 100
s.Parent = SoundService; s:Play()
```
**SoundGroups** (mixer): Nest `SoundGroup` under Master for player-adjustable Music vs SFX volume. `bgMusic.SoundGroup = musicGroup`. Effects (`ReverbSoundEffect`, `EqualizerSoundEffect`, `CompressorSoundEffect`, etc.) parent to Sound/SoundGroup. Ducking: `CompressorSoundEffect` with `SideChain = sfxGroup` on music.
**New Modular**: 2D: `AudioPlayer → Wire → AudioDeviceOutput`. 3D: `AudioPlayer → Wire → AudioEmitter` (on Part). Studio/plugin-only `SoundService.DefaultListenerLocation` controls the default listener; wire an explicit `AudioListener` for runtime control.
**One-Shot SFX**:
```luau
local function playSFX(parent, id)
local s = Instance.new("Sound"); s.SoundId = id
s.RollOffMode = Enum.RollOffMode.InverseTapered
s.RollOffMinDistance = 10; s.RollOffMaxDistance = 80
s.Parent = parent; s:Play()
s.Ended:Once(function() s:Destroy() end)
end
```
**Preload**: `ContentProvider:PreloadAsync({sound1, sound2})`. **Client SFX**: `FireClient` → `OnClientEvent` creates invisible Part + `playSFX`.
**Pitfalls**: Server sounds have latency → play feedback on client. Default `RollOffMaxDistance`=10000 studs → set explicitly. Volume > 1 clips. Rapid-fire → check `IsPlaying`. Always `Destroy()` one-shots after `Ended`.
See `references/full.md` for detailed examples, effect table, and client-side patterns.
© TabooHarmony · MIT · TabooHarmony/roblox-brain