About roblox-audio
A skill guide for Roblox audio development, covering legacy Sound objects and the modular AudioPlayer/Wire system. It supports work on playback, spatial audio, mixing, and dynamic effects.
Key features
- 01Legacy and modular audio systems
- 022D and 3D audio routing
- 03SoundGroup mixing and effects
- 04Audio preloading and one-shot sounds
- 05Client audio playback considerations
Use cases
- 01Add background music and sound effects
- 02Configure spatial audio and roll-off
- 03Set separate music and SFX levels
- 04Avoid server latency in audio feedback
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ tabooharmony/ roblox-brain --skill roblox-audioAfter installing, type/roblox-audioin Claude Code to confirm it loaded.
Bundled filesreferences/full.md
Details
From the project READMERoblox 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:
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:
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.