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?
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 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
git clone https://github.com/wineasio/wineasio
git submodule update --init --recursive
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
With this path, set your
WINEPREFIX environment variable, and run the WineASIO registration script:
export WINEPREFIX= ... # Your path here
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
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.