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
kAsioResetRequestsynchronously on the
config-watcher thread: the watcher teardown no longer waits on itself - it
signals stop and lets the COM-threadDisposeBuffers/Releasepath 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 callsaudio_port_buffer_avail_frames, which is unix-side only; the
PE half (which links the WoW64 proxy instead ofaudio.c) now carries a matching
stub, since that gather actually runs unix-side.-DBUILD_WOW64_32=ONbuilds
again, with 32-bit load + streaming re-verified throughasio_probe32and
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 andaudio_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 (likewow64_port_by_namealready 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-sidepipeasio_config_path(), whosegetenv()
cannot see$XDG_CONFIG_HOME/$HOMEin 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 runpipeasio-register. - Proton / Faugus: extract to
$HOME/.localand setWINEDLLPATH=$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.