Skip to content

OSLS — Orbit Speaker Layout System

OSLS is a fully customisable speaker output system, added in Orbit 1.5.2. Describe any speaker layout and Orbit will output to it — up to 64 channels. That covers everything from a 10.1.4 room to 22.2, Auro configurations, or a 30-speaker dome. Custom output layouts work in both Orbit and Orbit Pro.

Screenshot: the Speaker Layout & Routing window — custom layouts, .osls import, routing presets and the output routing matrix

The problem it solves

Speaker-layout tables normally get hardcoded and then duplicated across the app, the audio engine and the UI. Over time those copies drift: they disagree on channel order, use different labels, and every new format needs a code change in several places at once.

OSLS replaces all of that with one human-readable file per layout (.osls) plus one small SDK. A rig is described once — where each speaker is, its stable identity, and its reference frame — and that single description becomes the source of truth across native, browser, Windows and mobile. Adding a format becomes adding a file, not editing code.

Automatic format mapping

Once a layout is selected, Orbit maps incoming files onto it automatically, following each format's own specification:

  • Channel elements (IAMF) and beds / direct speaker sources (ADM) output to their direct speakers. Where a direct speaker isn't present in your layout, they route to the nearest neighbours using the configured panning method.
  • Scene-based and object-based elements and sources make full use of every speaker in the layout, not just the channels a legacy bed would have used.

Per-spec channel orders (ADM, IAMF, MPEG-H) aren't restated in each layout file. The SDK resolves them from a shared profiles registry by matching each speaker's identity, so the same .osls file behaves correctly regardless of which format you feed it.

Building a custom layout

An .osls file describes the rig and nothing more:

  • Position — each speaker's location, given as Cartesian, polar, or both.
  • Identity — a stable ITU-R BS.2051 SP-label (for example M+030 or LFE1) so the SDK can recognise the speaker across specs.
  • Reference frame — the coordinate frame the positions are expressed in.
  • LFE handling for the layout.

Here's the blessed 7.1.4 layout as an .osls file. Each speaker carries a stable identity (sp), Cartesian coordinates, and — for this layout — polar angles too, with the validator checking the two agree:

yaml
osls: 1
id: "7.1.4"
name: "7.1.4"
description: "7.1.4 home immersive layout (7 ear-level + LFE + 4 overhead). ITU-R BS.2051 System J. Same rig, ADM and IAMF orderings. Carries both Cartesian and polar positions (validator-checked equal)."
vendor: io.orbitspatial
tags: [home, immersive]
frame: egocentric
speakers:
  - { id: L, label: L, sp: M+030, x: -0.5, y: 0.866, z: 0.0, az: 30, el: 0 }
  - { id: R, label: R, sp: M-030, x: 0.5, y: 0.866, z: 0.0, az: -30, el: 0 }
  - { id: C, label: C, sp: M+000, x: 0.0, y: 1.0, z: 0.0, az: 0, el: 0 }
  - { id: LFE, label: LFE, sp: LFE1, x: 0.0, y: 1.0, z: -0.5, lfe: true }
  - { id: Lss, label: Lss, sp: M+090, x: -1.0, y: 0.0, z: 0.0, az: 90, el: 0, aliases: [Ls] }
  - { id: Rss, label: Rss, sp: M-090, x: 1.0, y: 0.0, z: 0.0, az: -90, el: 0, aliases: [Rs] }
  - { id: Lrs, label: Lrs, sp: M+135, x: -0.707, y: -0.707, z: 0.0, az: 135, el: 0, aliases: [Lsr] }
  - { id: Rrs, label: Rrs, sp: M-135, x: 0.707, y: -0.707, z: 0.0, az: -135, el: 0, aliases: [Rsr] }
  - { id: Ltf, label: Ltf, sp: U+045, x: -0.5, y: 0.5, z: 0.707, az: 45, el: 45 }
  - { id: Rtf, label: Rtf, sp: U-045, x: 0.5, y: 0.5, z: 0.707, az: -45, el: 45 }
  - { id: Ltb, label: Ltb, sp: U+135, x: -0.5, y: -0.5, z: 0.707, az: 135, el: 45, aliases: [Ltr] }
  - { id: Rtb, label: Rtb, sp: U-135, x: 0.5, y: -0.5, z: 0.707, az: -135, el: 45, aliases: [Rtr] }

Design a layout in your browser

The 3D layout designer at osls.io lets you build, customise and validate a layout visually, then export the .osls file to import into Orbit.

The osls.io browser designer — a 3D sphere of speakers with SP-labels, an editable speaker list, and per-speaker Cartesian/polar position fields

What OSLS is not

OSLS describes the rig — it does not render it

OSLS is deliberately narrow. It covers geometry, identity, per-spec ordering and LFE, then stops.

  • It is not a renderer — down-mix, panning and HRTF maths stay in the Orbit engine.
  • It is not a patch map — which physical output each channel actually hits is the app's job. See Output routing.

Open source

OSLS is fully open source under the Apache 2.0 licence — permissive, with an explicit patent grant. The full specification, JSON Schema, blessed layouts and reference SDKs (TypeScript, a C ABI, Swift and WASM) are on GitHub at github.com/South-Loop-Studios/osls.

The OSLS GitHub repository README — 'Speaker layouts, declaratively', an Apache-2.0 licence, an example .osls file, and the TypeScript / C++ / Swift / WASM language breakdown

Orbit Spatial® is a registered trademark of South Loop Studios. All rights reserved.