A photo of Evan Pratten
Evan Pratten

WineASIO, Bottles, and Ableton

How to run Ableton in a bottle with minimal latency

Ableton was not built to run inside Wine. Yet, I’ve been doing it anyways for the past 6-ish years with reasonable success anyways.

Over those years, my one complaint about the setup is latency. No matter what I tweaked, I couldn’t get audio input/monitoring to behave as well as it does on a supported operating system.

Generally, when you encounter audio latency issues on Windows, the go-to solution is Steinberg’s Audio Stream Input/Output (ASIO) API. Its effectively a direct pipe between software and your sound card, bypassing the Windows audio stack entirely. Could there be such a thing for Wine?

WineASIO

Well, you read the title of this post, so I kinda already gave the answer to that question away.

WineASIO is a project that implements the ASIO API inside Wine, and pipes the audio to the Jack Audio Connection Kit (JACK) on the host system instead of a physical sound card.

While you could just follow the instructions in the WineASIO project README and skip over the rest of this post, the WineASIO project is mainly designed to work with a standard Wine install and JACK running on the host system. Being a Fedora user, I have neither of these things.

I instead use Bottles to manage multiple wineprefixes (wineprefixi?) and PipeWire to manage audio on my system. So, I had to do a bit of extra work to get WineASIO working.

Compiling

Compiling WineASIO is quite simple. Firstly, grab the dependencies (the Wine and JACK headers):

sudo dnf install pipewire-jack-audio-connection-kit-devel wine-devel

Then, clone the WineASIO repo and compile it:

# Clone the repo
cd /tmp
git clone https://github.com/wineasio/wineasio
cd wineasio
git submodule update --init --recursive

# Compile
make 64

This will produce a pair of libraries in ./build64. Copy them to Wine’s library directories:

sudo cp ./build64/wineasio.dll /usr/lib64/wine/x86_64-windows/
sudo cp ./build64/wineasio.dll.so /usr/lib64/wine/x86_64-unix/

Installing into a Bottle

Firstly, you need to know your bottle’s WINEPREFIX. You can find this by taking the output of the command bottles-cli info bottles-path and appending the name of your bottle to it. For example, my Ableton installation looks like this:

# echo $(bottles-cli info bottles-path)/Ableton-11-Suite
/home/ewpratten/.local/share/bottles/bottles/Ableton-11-Suite

With this path, set your WINEPREFIX environment variable, and run the WineASIO registration script:

export WINEPREFIX= ... # Your path here
/tmp/wineasio/wineasio-register

Finally, copy the built libraries into your bottle:

cp /tmp/wineasio/build64/wineasio.dll.so $WINEPREFIX/drive_c/windows/system32/wineasio.dll
cp /tmp/wineasio/build64/wineasio.dll.so $WINEPREFIX/drive_c/windows/system/wineasio.dll

Using WineASIO

Now that WineASIO is installed, Ableton will automatically detect it and list it in your audio drivers list. Simply select it, and you’re good to go. (You even get Ableton Link support when using WineASIO!)

I personally have a script that handles this whole process for me automatically.

Oh, ya. Happy New Year btw.