2024-01-06

Getting WineASIO to work (at least on Fedora 39)

Background

Recently I formatted my home computer and made the jump to Linux – specifically, the lazy way and just using Fedora Workstation 39 KDE Spin. It’s been surprisingly pretty good so far!

However, I wanted to try running a Windows game via WINE which had ASIO support to get its HD audio working. After some mucking about, I got WineASIO working and thought I’d share the details on how.

Making it work

Note: I only needed it working for 64-bit so that’s all I bothered with. It also assumes you are wanting to use Pipewire JACK (although, build steps could probably be adapted to regular JACK too).

Building WineASIO

In case it works (and/or saves me time in future!), I’ve uploaded a build of v1.2.0 here: /static/upload/wineasio64-1.2.0-build.tar.gz

  1. Grab a copy of WineASIO’s source code (at time of writing it was v1.2.0): https://github.com/wineasio/wineasio/releases
  2. Install build dependencies (assuming you already have base ‘Development Tools’ group): sudo dnf install pipewire-jack-audio-connection-kit-devel wine-devel
  3. Unpack it, then simply use make 64 to run the build, outputs into build64. Out should come a wineasio64.dll and wineasio64.dll.so
    • (A reference I saw seemed to suggest a modified Makefile was needed, but this seemed to no longer be the case)

Installing WineASIO

In my case, I was using Bottles (Flatpak) to manage my WINE prefix, so this was the part that needed to cater for it. For the purposes of these steps, I will highlight the Bottles locations. – Otherwise, the default WINE prefix lives in ~/.wine, and the default WINE libraries live in /usr/lib64/wine.

(wineasio-register could work, but to make sure the final registering works in Bottles I think it’s better to just do it manually.)

  1. Ensure the Pipewire JACK connection kit is installed, and the system is ready for realtime: sudo dnf install pipewire-jack-audio-connection-kit realtime-setup
  2. Ensure your user is able to use realtime, and can access audio devices: sudo usermod -aG realtime,audio $USER
  3. Copy built WineASIO libraries into WINE libraries folder:
    • cp wineasio64.dll.so ~/.var/app/com.usebottles.bottles/data/bottles/runners/wine-ge-proton8-25/lib64/wine/x86_64-unix
    • cp wineasio64.dll ~/.var/app/com.usebottles.bottles/data/bottles/runners/wine-ge-proton8-25/lib64/wine/x86_64-windows
  4. Copy built WineASIO DLL into relevant prefix folder (or, the game EXE folder should work too):
    • cp wineasio64.dll ~/.var/app/com.usebottles.bottles/data/bottles/bottles/<BOTTLE NAME>/drive_c/windows/system32
  5. For Bottles Flatpak, you’ll also need to allow access to the Pipewire device:
    • flatpak override --user --filesystem=xdg-run/pipewire-0 com.usebottles.bottles
    • Restart Bottles for good measure
  6. Register WineASIO DLL with the WINE system:
    • In Bottles, fire up the Command Prompt for the relevant prefix
    • C:
    • cd C:\WINDOWS\SYSTEM32
    • regsvr32 wineasio64.dll
  7. A reboot is now probably required

Testing it

At this stage you may be able to just fire up whatever it is you’re trying to do. However, in my case, it was very unhelpful because at first it didn’t work right away, and the game decided to hang on startup.

  1. Grab a copy of VB-Audio’s ASIO Driver Tester: https://forum.vb-audio.com/viewtopic.php?t=1204
  2. Unpack it, then launch VBASIOTest64.exe
  3. Click ‘Devices’ -> ‘WineASIO’
    • (At this stage, WineASIO should come up. Otherwise, review the installation steps above.)
  4. You should hear a sine wave playing, and numbers should start coming up. This is how you know it all worked!
    • (Otherwise, an error message should come up below and in the terminal. In my case, the terminal output suggested it couldn’t connect to JACK, and it turned out it was the Flatpak allow step that was missed.)

The ASIO device should be ready to go, connected to Pipewire JACK! It should be simply called ‘WineASIO’, for any programs that should require its name.

References

Notably, some of these details I stumbled across were seemingly out of date in some spots, so I wanted to post my own post/guide. They did help me put this together though, so here are the references:

(Edits – 2024-01-07: Added missing realtime/audio setup+group steps, missing C drive switch in DLL registration, and minor reordering; 2024-01-29: Moved prebuilt download into same domain)