Skip to content

PipeASIO 1.0.0

Latest

Choose a tag to compare

@M0n7y5 M0n7y5 released this 10 Jun 13:19
· 1 commit to master since this release

First stable PipeASIO release. An ASIO driver for Wine that talks to PipeWire directly through libpipewire-0.3 — no libjack.so.0 runtime dependency — so it loads inside the Steam Runtime container that Proton uses.

Verified with FL Studio under Proton-CachyOS and VB-Audio ASIO Test. A digital loopback analyzer confirms the driver is bit-exact end-to-end with zero dropped buffers and a measured round-trip latency exactly matching GetLatencies(), across buffer sizes 128–1024 at 44.1/48/96 kHz. Other ASIO hosts (Reaper, Ableton Live) should work but are not yet confirmed — reports welcome on the issue tracker.

Changes since 1.0.0-rc1:

Added

  • CI on GitHub Actions: every push and pull request builds the driver and panel and runs the Linux-native test suite on Arch Linux.
  • The integration probe now verifies that the sample position advances during the run and that the timecode Future selectors are denied.
  • tests/asio_loopback: a digital loopback analyzer (RTL-Utility/RMAA equivalent for a converter-less driver). It plays a per-channel frame counter through the driver and a PipeWire null-sink loopback and fails on any non-bit-exact sample, dropped or duplicated buffer, swapped channel, or measured round-trip latency disagreeing with GetLatencies(); SWEEP=1 covers buffer sizes 128–1024 at 44.1/48/96 kHz with in-process buffer re-negotiation.

Changed

  • Relicensed the entire project under GPL-3.0-or-later, replacing the previous split of LGPL-2.1-or-later (driver) and GPL-2.0-or-later (settings panel). The separate COPYING.LIB / COPYING.GUI files are now a single COPYING (the GPLv3 text). The original WineASIO authors' copyright notices are retained; the relicensing uses the "or later" upgrade path (and LGPL 2.1 section 3) that those licenses already grant.

Removed

  • Fake ASIO timecode support. The driver no longer answers kAsioCanTimeCode / kAsioEnableTimeCodeRead affirmatively or fills ASIOTime.timeCode with fabricated values — PipeWire has no transport timeline to source timecode from. Hosts fall back to sample-position sync, which is accurate.

Fixed

  • GetSamplePosition returned only the low 32 bits of the sample counter, wrapping to zero after about 25 hours at 48 kHz; it now reports the full 64-bit position.
  • regsvr32 /u now actually removes the driver's registry keys. Unregistration deleted keys through a handle opened without DELETE access, so every delete failed and the CLSID and Software\ASIO\PipeASIO entries were left behind; the recursive delete is now RegDeleteTree, and unregistering an already unregistered driver succeeds.
  • Driver registration and unregistration now report real failures: raw win32 error codes were previously returned where COM HRESULTs are expected, so errors like access-denied counted as success.
  • The Wine test hosts (asio_probe, asio_loopback) parse their command line themselves: current Wine's CRT startup delivers argc=0 to main(), so the probe's seconds argument was silently ignored.

Full changelog: v1.0.0-rc1...v1.0.0

See the README for build, install, and Proton/Faugus setup instructions.