Skip to content

PipeASIO v1.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 29 Jun 23:06
· 2 commits to master since this release
v1.2.0
0284c49

Added

  • The Monitor tab now shows the Output device and Input device the
    driver's ports are currently connected to - the live sink and source resolved
    from the PipeWire graph - so it is obvious which hardware the driver is
    feeding, especially when autoconnect or "follow default" picks the device.
    Each row also reports the device's negotiated format (rate, channels, sample
    format), its state, and the Bluetooth codec when applicable (e.g. aptX), and
    sits below the live State row.
  • New About tab in the settings panel with the version, a short description,
    and links to the website and documentation, the GitHub repository, the issue
    tracker, and a Ko-fi support link.

Changed

  • Live config reload now diffs the INI before resetting. Saving the settings
    panel re-negotiates the audio graph only when a reset-worthy field actually
    changed, so a no-op save (or one that merely rewrites the file) no longer
    causes a dropout. Buffer size, sample rate, device selection, follow-device
    clock, and autoconnect now take effect on the reset itself - the new PipeWire
    quantum applies even when the host only re-creates buffers instead of fully
    re-initializing the driver, which previously left buffer-size changes silently
    unapplied. Channel-count and node-name changes are detected and logged as
    needing a driver reselect, since those ports are allocated at init.

Fixed

  • Deadlock when an ASIO host services kAsioResetRequest synchronously on the
    config-watcher thread: the watcher teardown no longer waits on itself - it
    signals stop and lets the COM-thread DisposeBuffers/Release path reap the
    thread and event handles.
  • Data races on the driver run-state and the host-callback pointer, which the
    config-watcher and the real-time process callback read while the COM thread
    wrote them; both are now atomic.
  • Real-time input copy could read past a PipeWire capture buffer smaller than
    the host period (graph quantum below the configured buffer size). The input
    gather is now clamped to the mapped buffer and the tail zero-filled, mirroring
    the existing output-side clamp; both the 64-bit and WoW64 paths are fixed.
  • The experimental 32-bit WoW64 PE front end no longer fails to link. The input
    clamp above calls audio_port_buffer_avail_frames, which is unix-side only; the
    PE half (which links the WoW64 proxy instead of audio.c) now carries a matching
    stub, since that gather actually runs unix-side. -DBUILD_WOW64_32=ON builds
    again, with 32-bit load + streaming re-verified through asio_probe32 and
    VB-Audio's VBASIOTest32.
  • 32-bit (WoW64) autoconnect linked nothing to hardware: wow64_port_register
    never handed the PE side a token for the freshly registered port, so the
    proxy returned a NULL handle and audio_port_name() came back empty - the
    link factory then could not resolve our own ports (node=4294967295,
    pw_port_id=0) even though the device ports resolved. The handler now assigns
    the out-token (like wow64_port_by_name already did); our input/output ports
    resolve and link to the selected source/sink. Streaming was unaffected (it
    runs unix-side), so the regression only showed as silent autoconnect.
  • 32-bit (WoW64) live config reload was always disabled. The watcher resolved
    the INI path with the PE-side pipeasio_config_path(), whose getenv()
    cannot see $XDG_CONFIG_HOME/$HOME in the Windows environment under Wine,
    so it logged "cannot resolve config path" and returned before reaching the
    unixlib fingerprint poll it already carried. It now skips the PE-side lookup
    in the WoW64 build and detects edits through
    pipeasio_wow64_config_fingerprint(), so saving the panel re-applies live in
    32-bit hosts too.

Install

Prebuilt for Arch Linux / CachyOS (x86_64). The exact build toolchain (Wine, glibc, PipeWire, MinGW) is recorded in BUILD-INFO.txt inside the tarball.

  • User-local: tar -xzf pipeasio-v1.2.0-archlinux-x86_64.tar.gz -C "$HOME/.local", then run pipeasio-register.
  • Proton / Faugus: extract to $HOME/.local and set WINEDLLPATH=$HOME/.local/lib/wine.

Compatibility

A Wine builtin DLL is coupled to the Wine version and glibc it was built against. A different Wine or an older glibc may fail to load (regsvr32 c0000135). In that case build from source (README) or use the AUR package. Source tarballs are attached automatically below.