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
RmsLevelandPeakLevelupdate faster than the frame rate and don't fireChanged. Poll them, for example onRenderStepped.- On the server everything reads 0 or empty, because no audio is processed there.
GetSpectrum()returns empty if any input comes from anAudioDeviceInput, 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 = Enabledand microphone enabled in Experience Settings › Communication.- Run it on the client with the local player's mic. The
AudioDeviceInput.Playermust be the local player. - Throttle:
1 + 5 × concurrent usersrequests 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.