Skip to content

Omniphony v0.6.0

Latest

Choose a tag to compare

@github-actions github-actions released this 20 Sep 12:37
dd5546b

Highlights

Omniphony 0.6.0 ships two Studios, a binaural stage rebuilt from the measurements up, and a renderer that places each format's speakers where that format says they stand.

  • A native Studio. omniphony-studio-egui is the Studio re-implemented on egui/wgpu: same OSC protocol, same state, same panels, without a web view. It draws at the display's rate under full object load, idles at zero CPU and sits around 60 MB resident where the Tauri Studio needs several hundred. Shipped for the first time as one archive per platform (omniphony-studio-egui-v0.6.0-<platform>): the Studio, the orender renderer built from the same commit, the layouts and the head model, in one directory; unpack and run. Before shipping it went through a hardening pass: one core-owned connection state shared by every panel; no disk or network I/O left on the drawing thread (connections, renderer launch, service actions, file pickers, layout transfers, mpv configuration); preferences written atomically with a final flush at quit; text drafts that survive a renderer echo; request deadlines and correlated file replies; diagnostic history recorded at OSC reception rather than sampled per frame; accessible names and visible keyboard focus on the shared controls; panels laid out as section, group and inset, with the master, latency and DRC meters readable in their section headers while the section is folded. No installer yet; the Tauri Studio (.deb/.rpm/.AppImage/.msi/.exe/.dmg) remains the packaged one and the only one that deploys the engine library for mpv.
  • Speakers where the format puts them. A fixed channel's place used to be one global rule, the corner of the room model its label names, plus a single virtual bed. The decoder bridge now declares where a format puts its speakers (bridge_api 0.4), and the renderer places fixed channels per source family (Dolby, DTS, Auro-3D, PCM) in one of three modes: Sphere, the format's own angles, or the ITU-R BS.2051 nominal ones where it states none; Room, the corner catalogue (Dolby's cube), as before; Manual, your own entries, which is what the virtual bed was. A 30° height tier joins the label set (Lh/Rh/Ch/Lhs/Rhs, above the floor speaker of the same name), so Auro-3D's height layer no longer lands on the ceiling corners. Both Studios get a placement editor with one tab per family; the existing virtual bed becomes the generic family's Manual layout.
  • Binaural, series 2. Measured HRIR sets are stored as minimum-phase responses and interpolated over their spherical triangulation on a 5° grid; the set is diffuse-field equalised; the pinna model is fitted to the embedded KEMAR set instead of a population average; each early reflection gets its own interaural delay and its wall's low-pass; the reverb runs on 16 lines with its modulation all but gone, and its size and per-band decay are live settings in Studio; the reflection room grows to contain the scene. Head tracking gains a three-pose calibration of the sensor's axes and smoothing as a time constant. Studio shows which HRTF set is actually playing, and why, when a SOFA file did not load.
  • Live bed edits reach the sound. The bed editor's per-channel gain now rendered at unity on every path; it reaches the sound, with 0.1 dB resolution, and a live bed edit reaches a playing object stream instead of the next track.
  • The auto-tune runs in Rust. The state machine and its detectors are ported from the JS and replayed against recorded runs; the channel-alias table, the geometry and the OSC address catalogue are each one crate shared by the renderer and both Studios, instead of hand-copied.

Behaviour changes

  • Decoder bridge ABI. bridge_api moves from 0.3 to 0.4. This release requires harletty-bridge 0.8.0: a 0.7.x bridge is refused at load, and a 0.8.0 bridge is refused by an older renderer. Update both together. The player-facing liborender ABI only grows (minor 8, five labels added), so an mpv built for 0.5.2 keeps loading the 0.6.0 engine.
  • A render.virtual_bed entry in a config is migrated to render.placement.generic in Manual mode; the OSC address control/virtual_bed keeps working as an alias of the generic family's layout. Defaults: Auro-3D in Sphere, every other family in Room. Auro-3D heights therefore play 30° above the surrounds where they used to sit at the ceiling corners.
  • The native Studio's stepped sliders no longer re-send a value the renderer echoed. With the Room section open this was a feedback loop that kept the renderer re-planning its layout at the frame rate.
  • The native Studio's Stats and Camera sections are gone; the --stats-interval line on stdout remains.
  • The web Studio's overlay switch, and the scene-effects bar mirroring it, follow the engine's state when the overlay is flipped from mpv or from another client.
  • The pipewire_bridge live-input mode is now called pipewire; the PCM-only pipewire sink is gone (the bridge sink already accepted linear PCM). Old names remain accepted when reading a config; a saved config is rewritten with the new name.
  • A second renderer publishing the same PipeWire sink is reported instead of silently taking over the default sink.
  • The speaker test is audible on direct (non-spatialised) speakers, such as the LFE.
  • A declared option set over OSC is rebroadcast, so every client sees the value the engine kept.
  • The file sink ends the run cleanly when its consumer closes the pipe.
  • orender --version reports the release tag; a tarball built inside an unrelated repository no longer borrows that repository's commit.

Known limitations

  • The native Studio archive is not signed on macOS and not installed on any platform: it runs from the unpacked directory. It does not deploy the engine library for mpv; use the Tauri Studio or the orender package for that.
  • The native Studio reads a CJK-capable font from the system (Noto CJK, Droid Sans Fallback, MS Gothic, Hiragino); without one, Japanese, Chinese and Korean labels render as boxes.
  • Switching the crossover engine or its transition width mid-playback still rebuilds the filter bank with a brief discontinuity.
  • The Sphere mode renders the angles a format declares; Dolby declares none (its bed lives in the cube), so a Dolby family switched to Sphere uses the BS.2051 nominal angles.

The decoder bridge is distributed separately and this release needs its 0.8.0: Auro-3D unfolding, the DTS:X object profiles, the E-AC-3 dependent pairing, and the declared speaker poses this release renders.

macOS install note

The macOS builds (Omniphony.Studio_aarch64.app.tar.gz / .dmg, and the native Studio's zip) are ad-hoc signed and not notarized yet, so Gatekeeper will refuse to open the downloaded app ("can't be opened" / "damaged"). After extracting, clear the download quarantine once:

xattr -rd com.apple.quarantine "/path/to/Omniphony Studio.app"
xattr -rd com.apple.quarantine /path/to/omniphony-studio-egui-v0.6.0-macos-arm64

Alternatively: try to open it once, then System Settings → Privacy & Security → "Open Anyway" (if offered). See #201.