Skip to content

Routing and analysis

Wire

Connects one pin to another. See Concepts for fan-in, fan-out and cycles.

Property Notes
SourceInstance, SourceName Where the stream comes from. Pin default "Output".
TargetInstance, TargetName Where it goes. Pin default "Input". Use "Sidechain" for a compressor's sidechain.
Connected Read-only. True when both ends and pins are valid and there is no cycle.

RenameToDefault() resets the pin names.

Wirable classes: every Audio* class on this page and the others, plus VideoPlayer and VideoDisplay. Sound and SoundGroup are not wirable.

AudioChannelMixer

Combines separate mono streams into one multichannel stream. Pins:

  • Input: passed straight through to Output
  • Output
  • Per-channel inputs: Left, Right, Center, SurroundLeft, SurroundRight, Sub, BackLeft, BackRight, TopLeft, TopRight, TopBackLeft and TopBackRight

Layout (AudioChannelLayout) decides which channel pins are used:

Layout Pins used
Mono Center
Stereo Left, Right
Quad Left, Right, BackLeft, BackRight
Surround_5 Quad + Center
Surround_5_1 5 + Sub
Surround_7_1 5.1 + SurroundLeft, SurroundRight
Surround_7_1_4 All of them

AudioChannelSplitter

The reverse: one Input, a copy on Output, and the same per-channel pins as outputs, chosen by Layout. Use it to process left and right separately, or to fold a stereo asset to mono by splitting it and mixing Left and Right into a mixer's Center.

AudioAnalyzer

Measures a stream. It has one Input and no output, so it doesn't affect what you hear. Tap any point by fanning a wire off to it.

Member Notes
RmsLevel Average level of the last buffer, 0–1-ish linear. Stable. Use it for talking indicators and VU meters.
PeakLevel Loudest sample of the last buffer. Catches spikes.
SpectrumEnabled Off makes it much cheaper. Turn it on only if you call GetSpectrum.
WindowSize Small, Medium or Large. Bigger means finer frequency detail but slower updates.
GetSpectrum() → {number} RMS per bin, evenly spaced from 0 to 24,000 Hz

Analyzer rules

  • RmsLevel and PeakLevel update faster than the frame rate and don't fire Changed. Poll them, for example on RenderStepped.
  • On the server everything reads 0 or empty, because no audio is processed there.
  • GetSpectrum() returns empty if any input comes from an AudioDeviceInput, a privacy rule. Levels still work on voice. Spectra do not.

AudioSpeechToText

Turns speech into text. It has one Input pin.

Member Notes
Enabled Must be on to transcribe
Text The latest transcription. Watch it with GetPropertyChangedSignal("Text"). Clear it yourself after handling.
VoiceDetected Read-only. True while it hears speech.

How it works: it records while speech is detected, up to 10 seconds per utterance, then converts that clip and writes Text. The spoken language is detected automatically: Arabic, Chinese (Simplified and Traditional), English, French, German, Indonesian, Italian, Japanese, Korean, Polish, Portuguese, Russian, Spanish, Thai, Turkish or Vietnamese.

Requirements and limits:

  • VoiceChatService.UseAudioApi = Enabled and microphone enabled in Experience Settings › Communication.
  • Run it on the client with the local player's mic. The AudioDeviceInput.Player must be the local player.
  • Throttle: 1 + 5 × concurrent users requests per minute per experience. Buy more through Extended Services.
  • Turning the mic on also turns on default spatial voice. For private STT (commands only, not heard by others), set VoiceChatService.EnableDefaultVoice = false.
  • Push-to-talk makes detection much more reliable.

AudioRecorder (not released)

It is in the engine but marked "in development, not available yet". It records a wired stream for up to 60 seconds into temporary Content that an AudioPlayer can play back in the same session. It cannot record AudioDeviceInput, so voice can't be recorded. GetUnrecordableInstancesAsync() lists what blocks a recording. Methods: RecordAsync, Stop, Clear, CanRecordAsync, GetTemporaryContent; properties IsRecording and TimeLength.