Skip to content

Migrating from Sound

Roblox marks Sound, SoundGroup and SoundEffect as discouraged. They still work, but new features (wiring, acoustic simulation, voice routing, TTS, STT, scheduled playback) exist only in audio objects.

The big differences

Legacy Sound Audio objects
Structure One object does it all; its parent decides 2D or 3D Separate player, emitter, listener and output, joined by wires
3D Automatic when parented to a part Explicit AudioEmitter, heard by an AudioListener
Grouping SoundGroup (volume plus effects) Any effect or AudioFader used as a bus
Effects SoundEffect children, ordered by Priority Effect nodes wired in series, so order is the wiring
Voice Separate, internal Just another stream (AudioDeviceInput)
Listener One, global (SoundService:SetListener) Any number, with interaction groups
Level metering Sound.PlaybackLoudness AudioAnalyzer (RMS, peak, spectrum)
Timing Frame-based Play(atTime) against the sample clock
Wall muffling None Acoustic simulation

Property map

Sound Audio objects
SoundId AudioPlayer.Asset
Volume (0–10) AudioPlayer.Volume (0–10)
PlaybackSpeed AudioPlayer.PlaybackSpeed
Looped AudioPlayer.Looping
TimePosition, TimeLength Same names
PlaybackRegion, LoopRegion Same names
Playing IsPlaying (read-only; use Play() / Stop())
Play() / Stop() Play() / Stop(), but Stop doesn't rewind
Pause() / Resume() Stop() / Play()
IsLoaded / Loaded IsReady / watch IsReady
Ended, DidLoop Ended, Looped
PlayOnRemove Play from a temporary instance and destroy it on Ended
PlaybackLoudness AudioAnalyzer.RmsLevel / PeakLevel
RollOffMode, RollOffMinDistance, RollOffMaxDistance AudioEmitter.DistanceAttenuationMode + DistanceAttenuationBounds, or a custom curve
SoundGroup AudioFader (or any effect) that sources wire into
SoundService:PlayLocalSound(s) A client-side AudioPlayer → AudioDeviceOutput
SoundService.AmbientReverb AudioReverb on the listener path, or acoustic simulation
SoundService.RolloffScale, DopplerScale, DistanceFactor No direct equivalent; shape emitter curves instead

Effect map

SoundEffect Audio object
ChorusSoundEffect AudioChorus
CompressorSoundEffect AudioCompressor (sidechain is a wired pin, not a SideChain property)
DistortionSoundEffect AudioDistortion
EchoSoundEffect AudioEcho
EqualizerSoundEffect AudioEqualizer (or AudioFilter for precise bands)
FlangeSoundEffect AudioFlanger
PitchShiftSoundEffect AudioPitchShifter
ReverbSoundEffect AudioReverb
TremoloSoundEffect AudioTremolo
— New: AudioFilter, AudioGate, AudioLimiter, AudioFader, AudioAnalyzer, channel mixer and splitter

Converting a part sound

local sound = Instance.new("Sound")
sound.SoundId = "rbxassetid://0000000"
sound.Looped = true
sound.RollOffMaxDistance = 80
sound.Parent = workspace.Generator
sound:Play()
local part = workspace.Generator

local player = Instance.new("AudioPlayer")
player.Asset = "rbxassetid://0000000"
player.Looping = true
player.Parent = part

local emitter = Instance.new("AudioEmitter")
emitter.DistanceAttenuationMode = Enum.DistanceAttenuationMode.InverseTapered
emitter.DistanceAttenuationBounds = NumberRange.new(10, 80)
emitter.Parent = part

local wire = Instance.new("Wire")
wire.SourceInstance = player
wire.TargetInstance = emitter
wire.Parent = part

player:Play()

Make sure a listener exists (SoundService › ListenerLocation = Camera or Character), or nothing is heard.

Character sounds

Set SoundService.CharacterSoundsUseNewApi = Enabled and the default footsteps, jumps and other character sounds use AudioPlayer + AudioEmitter. They then get acoustic simulation and can be processed like anything else.