Skip to content

Sources

Objects that produce a stream on an Output pin.

AudioPlayer

Plays an audio asset. This replaces Sound.

Property Type Notes
Asset ContentId "rbxassetid://123". Loads at once if AutoLoad is on. (AssetId is the deprecated old name, still shown as "AssetID" in some tutorials.)
AutoLoad bool Load when Asset is set. If off, the asset loads on the first Play().
AutoPlay bool Start when it first enters the DataModel. Only for players created or loaded locally, not ones that arrive by replication. Mostly for Studio.
Volume float 0–10
PlaybackSpeed double 0–20. Changes pitch too.
Looping bool
PlaybackRegion NumberRange Start and stop seconds within the asset. Min = max means the whole asset.
LoopRegion NumberRange Loop points inside PlaybackRegion. Min = max means use PlaybackRegion.
TimePosition double Playhead in seconds. Read or write.
TimeLength double Read-only. Length of the loaded asset.
IsPlaying bool Read-only to scripts, but it replicates. Change it with Play() / Stop().
IsReady bool Read-only. Loaded and buffered. It can go false under extreme memory pressure.
Method / event Notes
Play(atTime?) → actionId? Plays from the current TimePosition. Replicates from server to client. With atTime, the play is scheduled against SoundService:GetMixerTime() for sample-accurate timing.
Stop(atTime?) → actionId? Stops where the playhead is. It works like a pause: set TimePosition = 0 to rewind. Can be scheduled the same way.
Cancel(actionId) → bool Cancels a scheduled Play or Stop that has not happened yet.
GetWaveformAsync(timeRange, samples) → {number} Volume samples over a time range without playing. Use it for waveform UIs or to pre-plan lip sync. Yields.
Ended Fires when playback reaches the end. Not for loops, and not when you call Stop(). To catch every stop, watch IsPlaying with GetPropertyChangedSignal.
Looped Fires on each natural loop. A manual TimePosition jump doesn't count.

Asset permissions

An audio asset only plays in experiences allowed to use it, meaning ones owned by the asset's creator or granted access. If an asset is silent and never becomes IsReady, check its permissions before your wiring.

AudioDeviceInput

A physical microphone as a stream. Voice chat creates one per voice-eligible player under their Player object (see Voice chat), and you can create your own.

Property Type Notes
Player Player Whose mic this is. Set it on the server so it replicates. Setting it locally only works when the value is Players.LocalPlayer.
Muted bool Scriptable mute. Local push-to-talk sets it on the client, and round-based muting sets it on the server.
Active bool Read-only to you. Roblox core scripts set it from the player's own mic toggle. Sound flows only when Active and not Muted.
Volume float 0–3
AccessType AccessModifierType Allow means only the listed users can hear this mic. Deny means the listed users cannot. Set it on the server.
Method Notes
SetUserIdAccessList({userId}) The list that AccessType applies to. Call it from the server, which replicates it.
GetUserIdAccessList() Read it back.

The access list controls who receives the voice stream at all, in every graph, not just proximity chat. If you put someone on a team-only allow list, they can't hear that mic over your radio either.

Echo cancellation, noise suppression and gain control exist internally but are Roblox-only and not scriptable.

AudioTextToSpeech

Generates speech from text. It works like an AudioPlayer whose "asset" is a sentence.

Property Type Notes
Text string Up to 300 characters per request. Must follow the Community Standards.
VoiceId string See the voice table below.
AutoLocalize bool Default true. Translates Text into each player's language and routes it to the matching voice (same gender). Supports Arabic, Chinese (Mandarin), English, French, German, Hindi, Italian, Japanese, Korean, Portuguese and Spanish.
Pitch float −12 to +12 semitones
Speed float 0.5–2 (speaking rate, pitch kept)
PlaybackSpeed float 0–20 (tape speed, pitch changes)
Volume float 0–3
Looping, TimePosition, TimeLength Same as AudioPlayer
IsLoaded bool Read-only. Speech is generated and buffered.
IsPlaying bool Read-only, but replicates
Method / event Notes
LoadAsync() → AssetFetchStatus Generates speech now and yields until it succeeds or fails. Call it ahead of time to avoid a gap before speaking.
Play() / Pause() They replicate from server to client. There is no Stop: use Pause and set TimePosition = 0.
Unload() Frees the generated audio.
GetWaveformAsync(timeRange, samples) Volume samples of the generated speech
Ended, Looped Same rules as AudioPlayer

Throttles: at most 1 + 6 × concurrent users requests per minute per experience, and 4 requests per second per user on the client. You can buy more through Extended Services.

Voice IDs
ID Voice ID Voice
1 British male 2 British female
3 US male #1 4 US female #1
5 US male #2 6 US female #2
7 Australian male 8 Australian female
9 Retro #1 10 Retro #2
11 Host voice
101 Spanish male 102 Spanish female
201 German male 202 German female
301 Italian male 302 Italian female
401 French male 402 French female
501 Mandarin male 502 Mandarin female
601 Hindi male 602 Hindi female
701 Japanese male 702 Japanese female
801 Arabic male 802 Arabic female
901 Korean male 902 Korean female
1001 Portuguese male 1002 Portuguese female

AudioListener (as a source)

A listener's Output pin carries everything it hears, already spatialized. It is usually wired to an AudioDeviceOutput, but it can also feed effects, an analyzer, or another emitter (a relay, like a baby monitor). See Spatial audio.

VideoPlayer

VideoPlayer is wirable: its soundtrack can be wired into the audio graph like any other source, for example to an AudioEmitter on the screen part. Start videos on the client where you can, because a server-started video is not guaranteed to be loaded or in sync on every client.