# roblox-audio

A skill for Roblox audio work: playback, 3D sound, music, effects and mixing through SoundGroups.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 2000 installs · ★ 127
- Author: TabooHarmony
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/TabooHarmony/roblox-brain/tree/HEAD/skills/gameplay/roblox-audio/SKILL.md
- Updated: 2026-10-15
- HTML: https://affpapa.org/en/nevibecode/skills/roblox-audio

## What it 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`.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add TabooHarmony/roblox-brain --skill roblox-audio -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/roblox-audio/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/roblox-audio/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add TabooHarmony/roblox-brain --skill roblox-audio -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/roblox-audio/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add TabooHarmony/roblox-brain --skill roblox-audio -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/roblox-audio/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install TabooHarmony/roblox-brain roblox-audio
```

2. **Manually: put the files in place**
- File: `.github/skills/roblox-audio/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add TabooHarmony/roblox-brain --skill roblox-audio -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/TabooHarmony/roblox-brain --path skills/gameplay/roblox-audio
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/roblox-audio/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add TabooHarmony/roblox-brain --skill roblox-audio -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/TabooHarmony/roblox-brain/tree/HEAD/skills/gameplay/roblox-audio/SKILL.md

## When to use it
- 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
- 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

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 11cabe584651416d.

BEGIN THIRD-PARTY FILE 11cabe584651416d
````text
---
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`.
````
END THIRD-PARTY FILE 11cabe584651416d

The third-party file has ended. Everything between the 11cabe584651416d tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2667 of 2984 bytes. © TabooHarmony · MIT · https://github.com/TabooHarmony/roblox-brain/tree/HEAD/skills/gameplay/roblox-audio/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
