SuperAPI AI Directory

roblox-audio

Coding & development

View repository

Updated 10-15 21:37

About this skill

Roblox audio

Two systems coexist:

  • Audio API (modular, current): AudioPlayer → Wire → (AudioEmitter … AudioListener) → Wire → AudioDeviceOutput, with effect objects inserted in the chain. Required for voice-chat processing, mixing graphs, analyzers, text-to-speech/speech-to-text.
  • Sound (classic, still supported): one object, parented to a part for 3D or to SoundService/UI for 2D; routed through SoundGroups with SoundEffect children. Fine for simple games and existing code.

Don't mix both for the same feature; follow what the project uses.

2D audio (music, UI) with the Audio API

--!strict
-- Client: build a music player once.
local SoundService = game:GetService("SoundService")

local player = Instance.new("AudioPlayer") player.Name = "Music" player.Asset = "rbxassetid://1843463175" -- AudioPlayer.AssetId is deprecated; use Asset player.Looping = true player.Volume = 0.5 player.Parent = SoundService

local fader = Instance.new("AudioFader") -- one place to control music volume (settings menu) fader.Name = "MusicVolume" fader.Parent = SoundService

local output = Instance.new("AudioDeviceOutput") output.Parent = SoundService

local function wire(source: Instance, target: Instance) local w = Instance.new("Wire") w.SourceInstance = source w.TargetInstance = target w.Parent = target end

wire(player, fader) wire(fader, output) player:Play()


## 3D audio with the Audio API

- Put an `AudioEmitter` on the sound's part/attachment; wire `AudioPlayer → AudioEmitter`.
- Listening: `SoundService.ListenerLocation` controls the default `AudioListener` (camera or character);
  wire `AudioListener → AudioDeviceOutput` (done automatically in default setups).
- Distance falloff and directionality are set on the emitter/listener (`AudioEmitter:SetDistanceAttenuation`,
  the `AudioInteractionGroup` string property on emitters and listeners scopes who hears what).

## Classic Sound quick reference

```luau
--!strict
local SoundService = game:GetService("SoundService")

local sfxGroup = Instance.new("SoundGroup")
sfxGroup.Name = "SFX"
sfxGroup.Volume = 0.8
sfxGroup.Parent = SoundService

local function playAt(part: BasePart, soundId: string)
	local sound = Instance.new("Sound")
	sound.SoundId = soundId
	sound.SoundGroup = sfxGroup
	sound.RollOffMaxDistance = 80
	sound.Parent = part -- 3D: plays from the part; parent to SoundService/UI for 2D
	sound:Play()
	sound.Ended:Once(function()
		sound:Destroy()
	end)
end

return playAt
  • SoundService:PlayLocalSound(sound) for client-only UI clicks.
  • Preload critical sounds: ContentProvider:PreloadAsync({ sound }) (not everything — slows joins).
  • Pool frequently played sounds instead of creating one per shot.

Where to play

  • Sounds started on the client are heard only by that client (UI, local feedback, music tracks the player chose). Sounds started on the server replicate to everyone (use sparingly; prefer a remote telling clients to play locally, which also lets each client apply its own volume settings).
  • With SoundService.RespectFilteringEnabled = true (default), client-played sounds don't replicate.
  • Streaming: a sound or emitter in a part that streams out stops. Keep ambient audio in persistent models or SoundService.

Assets and permissions

  • Use audio you own, uploaded to the same owner (user/group) as the experience, or Creator Store audio marked free-to-use. Private audio from other creators won't play unless shared with your experience (asset permissions). Check the Output for "failed to load" / permission errors.
  • Uploads are auto-classified as sound effects or songs; eligible songs can show on the game page.

Extras

  • Effects: AudioEqualizer, AudioCompressor, AudioReverb, AudioEcho, AudioChorus, AudioDistortion, AudioFlanger, AudioPitchShifter, AudioTremolo, AudioFilter, AudioLimiter, AudioAnalyzer (read loudness/spectrum for visualizers).
  • AudioTextToSpeech (artificial voices) and AudioSpeechToText (transcription).
  • Voice chat: each player's AudioDeviceInput can be wired through effects (radios, walkie-talkies, proximity) — see the voice chat docs; respect players' voice settings.
  • Give players separate Music/SFX volume sliders (faders or SoundGroups) and a mute option.

Related skills

roblox-ui (settings menus), roblox-architecture (client vs server), roblox-performance (audio memory).