PipeASIO - ASIO driver for Wine, native to PipeWire
Author: M0n7y5
Description: PipeASIO is an ASIO driver for Wine that speaks to PipeWire directly. No libjack, no Wine audio detour. Built so FL Studio and other ASIO hosts run under Proton.
Keywords: PipeASIO, ASIO driver, Wine, PipeWire, Proton, FL Studio, Linux audio, WineASIO, low latency audio, Steam Runtime, Faugus, ASIO Linux

New PipeASIO is now in the AUR: `paru -S pipeasio` on Arch, CachyOS and friends. More distros to follow. Star it on GitHub.

# PipeASIO

Low-latency ASIO audio for Windows DAWs on Linux. Runs under Wine and Proton, native to PipeWire.

v1.2.3 x86_64 PipeWire 1.6+ Wine 10+ GPL-3.0
Get started View on GitHub Support on Ko-fi

New: PipeASIO is now packaged in the AUR. `paru -S pipeasio` installs the driver, the settings panel and its menu entry in one go. Other distros build from source.

## Straight to PipeWire

PipeASIO is a native PipeWire client. Audio gets from your host to the graph in one hop, instead of detouring through Wine's audio layer or a JACK bridge that the Proton container does not even ship.

PipeASIO
FL Studio PipeASIO PipeWire Audio device
One hop, native, via `libpipewire-0.3` shared memory.
FL Studio ASIO (built in)
FL Studio Wine audio pipewire-pulse PipeWire Audio device
Works, but rides Wine's audio backend and the PulseAudio compatibility layer.
WineASIO (upstream)
FL Studio WineASIO libjack.so.0
Needs `libjack.so.0`, which is absent in the steamrt4 container, so it crashes on load.

## How it compares

FL Studio's built-in ASIO does work under Wine, but it is just a stereo stream handed to Wine's audio layer. PipeASIO is a first-class node in the PipeWire graph.

Capability | PipeASIO | FL Studio ASIO | WineASIO
--- | --- | --- | ---
Loads in Proton / steamrt4 | Yes | Yes | No, needs libjack
Path to PipeWire | Direct, native client | Through Wine audio | Through JACK
Routable per-channel node in the graph | Yes | No, one stream | Via JACK only
Graph clock locked to the host buffer | Yes | No | Partial
Live settings panel with a load monitor | Yes | No | No
Extra runtime dependency | None | Wine audio | libjack.so.0

## What you get

A focused, modern bridge between ASIO hosts and PipeWire, with a native settings panel.

### PipeWire native

Talks to `libpipewire-0.3` directly through a `pw_filter` DSP node. No JACK, no `libjack.so.0` at runtime.

### Runs under Proton

Loads inside the Steam Runtime steamrt4 container that Proton uses, via a host-provided `WINEDLLPATH`.

### Sample-accurate clock

Locks the PipeWire quantum to the host's negotiated buffer with `PW_KEY_NODE_FORCE_QUANTUM` for tight, glitch-free timing.

### Qt6 settings panel

A native `pipeasio-settings` app: channels, buffer size, device routing, plus a live Monitor tab showing the connected input/output devices, quantum, rate, xruns and a DSP-load graph.

### Bluetooth friendly

A follow-device-clock mode lets the target device drive the cycle, which Bluetooth sinks require since their clock is the radio link.

### Live config reload

The driver re-reads its INI while running, so saving in the panel applies within about a second. No reselecting the driver or restarting the host.

## The settings panel

Configure channels and routing, then watch the graph live. Shown here running under FL Studio.

Settings: channels, buffer, devices, follow-device clock.
Monitor: live quantum, rate, DSP-load graph, xruns, and the connected devices.
About: version, project links, and Ko-fi support.
Experimental 32-bit support: PipeASIO driving a 32-bit ASIO host (VB-Audio VBASIOTest32) over Wine's WoW64 - same 64-bit PipeWire backend.

## Quick start

x86_64 only. Building from source needs CMake 3.20+, the Wine SDK, `pkg-config`, `libpipewire-0.3-dev`, and (for the panel) `qt6-base-dev`.

Arch Linux / CachyOS: skip the build

    # driver + settings panel, from the AUR
    paru -S pipeasio   # or: yay -S pipeasio
    pipeasio-register

Plain Wine users are done. For Proton the system-wide install is invisible inside the container, so follow steps 1-2 (user-local) and step 4 instead. Everyone else, build from source:

1 / Build

    # clone and build (Release)
    git clone https://github.com/M0n7y5/pipeasio.git && cd pipeasio
    cmake -B build -DCMAKE_BUILD_TYPE=Release
    cmake --build build

2 / Install

    # user-local, required for Proton / Faugus / Steam
    cmake --install build --prefix "$HOME/.local"

    # ...or system-wide for a normal Wine setup
    sudo cmake --install build --prefix /usr

3 / Register into a wineprefix

    env WINEPREFIX="$HOME/Faugus/<game>" pipeasio-register

4 / Proton and Steam Runtime

Proton runs Wine in a container that cannot see `/usr/lib/wine`, so install under `$HOME` (above) and point Proton's Wine at the ELF half with `WINEDLLPATH`. In Steam, add it to the game's launch options (right-click the game > Properties > General):

    WINEDLLPATH=/home/<you>/.local/lib/wine %command%

In Faugus, put it in the per-game "Launch options" environment field:

    WINEDLLPATH=/home/<you>/.local/lib/wine

Use the absolute path (Faugus does not expand `~`). Then pick PipeASIO as the ASIO device inside your host. The full config reference and environment overrides live in the README.

32-bit games and hosts only: Proton runs 32-bit apps through classic split WoW64 by default, which cannot load PipeASIO's experimental 32-bit front end. Enable Proton's new WoW64 mode. In Steam, add `PROTON_USE_WOW64=1` alongside `WINEDLLPATH` in the game's launch options:

    PROTON_USE_WOW64=1 WINEDLLPATH=/home/<you>/.local/lib/wine %command%

In Faugus, enable the WoW64 option in the game's settings, or add `PROTON_USE_WOW64=1` to the same environment field as `WINEDLLPATH`. 64-bit games and hosts do not need this.

5 / Configure with the panel

The same install drops a native settings app, `pipeasio-settings` (built whenever `qt6-base-dev` is present). Launch it to set channels, buffer size and device routing, and to watch the live Monitor. Saves apply within about a second, with no host restart.

    pipeasio-settings

## Configuration

A flat INI at `~/.config/pipeasio/config.ini` (written by the panel). Every key also has an environment-variable override, and the defaults work out of the box.

Key | Default | What it does
--- | --- | ---
`inputs` / `outputs` | 2 / 2 | Number of PipeWire ports the driver opens.
`buffer_size` | 1024 | Preferred ASIO buffer size (power of two, 16 to 8192).
`fixed_buffer_size` | on | Lock the size, or let the host change PipeWire's quantum.
`sample_rate` | follow | `0` follows the graph, a non-zero value pins the rate.
`auto_connect` | on | Auto-wire channels to a hardware device on start.
`follow_device_clock` | off | Let the target device drive the cycle (needed for Bluetooth).

## Questions and troubleshooting

PipeASIO is at 1.2.3, verified with FL Studio under Proton-CachyOS and with the VB-Audio ASIO Test utility (64-bit and 32-bit). Other ASIO hosts (Reaper, Ableton Live) should work but are not yet confirmed. Reports are very welcome.

No sound, or the driver does not load under Proton?
Proton's container cannot see `/usr/lib/wine`. Install under `$HOME` and set `WINEDLLPATH` in the game's launch options - Steam: `WINEDLLPATH=/home/<you>/.local/lib/wine %command%`, Faugus: the same variable in the per-game environment field - then register in that prefix.
A 32-bit game or host does not list PipeASIO under Proton?
Proton runs 32-bit apps through classic split WoW64 by default, which cannot load the 32-bit front end. In Steam, add `PROTON_USE_WOW64=1` alongside `WINEDLLPATH` in the game's launch options: `PROTON_USE_WOW64=1 WINEDLLPATH=/home/<you>/.local/lib/wine %command%`. In Faugus, enable the WoW64 option in the game's settings. The install must also include the 32-bit half (`-DBUILD_WOW64_32=ON`).
Registering fails with status `c0000135`?
Wine could not find the unified PE name. The install creates `pipeasio.dll` symlinks next to `pipeasio64.dll` for Wine 10+, so re-run `cmake --install` to create them, then register again.
Bluetooth headphones produce no sound?
Turn on follow device clock in the panel (or set `PIPEASIO_FOLLOW_DEVICE_CLOCK=on`). A Bluetooth sink's clock is the radio link and cannot be slaved to the host, so the driver follows it instead.
Does it conflict with WineASIO?
No. PipeASIO has its own CLSID and registry identity, so it installs side by side with WineASIO and hosts list them as separate drivers.
How do I select it in my DAW?
After registering, pick PipeASIO from the host's ASIO device list. In FL Studio that is Options > Audio settings > Device.