ASIO to JACK driver for WINE
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gng 607ad0daf7 Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
.github/workflows Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
docker Simplify deps used in docker builds 6 months ago
gui Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
.gitignore Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
CONTRIBUTING.md Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
COPYING.GUI Update README, add GPLv2 license file for GUI 6 years ago
COPYING.LIB Update README, add GPLv2 license file for GUI 6 years ago
Makefile Cleanup "make tarball" target 6 months ago
Makefile.mk Allow to pass custom include and lib dirs 6 months ago
Makefile.wine11 Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
README.md Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
RELEASE_NOTES.md Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
WINE11_PORTING.md Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
asio.c Fix compiler warnings 6 months ago
asio_pe.c Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
asio_unix.c Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
jackbridge.c Fix build 6 months ago
jackbridge.h Load libjack.so.0 dynamically at runtime, removing build dep 6 months ago
main.c Fix build for newer versions of wine-staging 2 years ago
ntdll_wine.def Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
ntdll_wine32.def Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
package.sh Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
regsvr.c Remove dependency on asio headers 7 months ago
screenshot.png Reduce size of screenshot file 6 years ago
unixlib.h Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
wineasio-register Show outcome of wineasio-register to stderr 6 months ago
wineasio.def Add Wine 11 support with PE/Unix split architecture (v1.4.0) 3 weeks ago
wineasio.dll.spec WineASIO 0.1.0 15 years ago

README.md

WineASIO

WineASIO provides an ASIO to JACK driver for WINE.
ASIO is the most common Windows low-latency driver, so is commonly used in audio workstation programs.

You can, for example, use with FL Studio, Ableton Live, Reaper, and other DAWs under GNU/Linux systems (together with JACK).

Screenshot


πŸŽ‰ Wine 11 Support (NEW!)

WineASIO now supports Wine 11!

Wine 11 (released January 13, 2025) introduced a new DLL architecture that separates PE (Windows) code from Unix code. This required a complete rewrite of WineASIO's build system and internal architecture.

Wine Version Compatibility

Wine Version Build Method Status
Wine 11.x make -f Makefile.wine11 βœ… Fully Supported
Wine 10.2+ make -f Makefile.wine11 βœ… Fully Supported
Wine 10.0-10.1 make (legacy) βœ… Supported
Wine 6.x-9.x make (legacy) βœ… Supported

Building for Wine 11+

Prerequisites

# Ubuntu/Debian
sudo apt install gcc-mingw-w64 wine-stable wine-stable-dev libjack-jackd2-dev

# Fedora
sudo dnf install mingw64-gcc mingw32-gcc wine-devel jack-audio-connection-kit-devel

# Arch Linux
sudo pacman -S mingw-w64-gcc wine wine-staging jack2

Build Commands (Wine 11+)

Build both 32-bit and 64-bit versions:

make -f Makefile.wine11 all

Build only 64-bit:

make -f Makefile.wine11 64

Build only 32-bit:

make -f Makefile.wine11 32

Installation (Wine 11+)

sudo make -f Makefile.wine11 install

This will:

  • Copy wineasio64.dll to Wine's 64-bit PE directory
  • Copy wineasio64.so to Wine's 64-bit Unix directory
  • Copy wineasio.dll to Wine's 32-bit PE directory
  • Copy wineasio.so to Wine's 32-bit Unix directory
  • Register the driver with Wine

Manual Installation (Wine 11+)

For custom Wine installations, specify the Wine prefix:

sudo make -f Makefile.wine11 install WINE_PREFIX=/path/to/wine

Default paths for Wine 11:

# 64-bit
sudo cp build_wine11/wineasio64.dll /opt/wine-stable/lib/wine/x86_64-windows/
sudo cp build_wine11/wineasio64.so /opt/wine-stable/lib/wine/x86_64-unix/

# 32-bit
sudo cp build_wine11/wineasio.dll /opt/wine-stable/lib/wine/i386-windows/
sudo cp build_wine11/wineasio.so /opt/wine-stable/lib/wine/i386-unix/

Registration (Wine 11+)

After installation, register the driver:

# 64-bit
wine regsvr32 wineasio64.dll

# 32-bit (use syswow64 regsvr32 for WoW64)
wine ~/.wine/drive_c/windows/syswow64/regsvr32.exe wineasio.dll

Or use the Makefile:

make -f Makefile.wine11 register

Verify Installation

make -f Makefile.wine11 verify

This checks:

  • All DLL and SO files are in place
  • Registry entries are correct

Building for Wine 10.1 and Earlier (Legacy)

Build Commands

# 32-bit
make 32

# 64-bit
make 64

Installation (Legacy)

# 32-bit
sudo cp build32/wineasio32.dll /usr/lib/i386-linux-gnu/wine/i386-windows/
sudo cp build32/wineasio32.dll.so /usr/lib/i386-linux-gnu/wine/i386-unix/

# 64-bit
sudo cp build64/wineasio64.dll /usr/lib/x86_64-linux-gnu/wine/x86_64-windows/
sudo cp build64/wineasio64.dll.so /usr/lib/x86_64-linux-gnu/wine/x86_64-unix/

Note: Wine paths vary between distributions. Adjust paths accordingly.


Registering WineASIO

After installing, register WineASIO in your Wine prefix:

wineasio-register

Custom Wine Prefix

env WINEPREFIX=~/my-daw-prefix wineasio-register

Configuration

WineASIO is configured via the Windows registry (HKEY_CURRENT_USER\Software\Wine\WineASIO).
All options can be overridden by environment variables.

Available Options

Registry Key Default Environment Variable Description
Number of inputs 16 WINEASIO_NUMBER_INPUTS Number of JACK input ports
Number of outputs 16 WINEASIO_NUMBER_OUTPUTS Number of JACK output ports
Autostart server 0 (off) WINEASIO_AUTOSTART_SERVER Start JACK automatically
Connect to hardware 1 (on) WINEASIO_CONNECT_TO_HARDWARE Auto-connect to physical ports
Fixed buffersize 1 (on) WINEASIO_FIXED_BUFFERSIZE Buffer size controlled by JACK
Preferred buffersize 1024 WINEASIO_PREFERRED_BUFFERSIZE Preferred buffer size (power of 2)
Client name (auto) WINEASIO_CLIENT_NAME JACK client name

GUI Control Panel (Wine 11)

A PyQt5/PyQt6 control panel is included for configuring WineASIO settings. When you click β€œShow ASIO Panel” in your DAW (e.g., FL Studio, Reaper), WineASIO launches the native Linux settings GUI.

How it works:

  1. Your DAW calls the ASIO ControlPanel() function
  2. WineASIO's Unix-side code uses fork()/exec() to launch wineasio-settings
  3. The Python/PyQt GUI reads and writes settings to the Wine registry

Launch manually:

# From Linux terminal
wineasio-settings

# From Wine (using Windows launcher)
wine /usr/share/wineasio/wineasio-settings64.exe

Requirements:

  • PyQt5 or PyQt6: pip install PyQt5 or pip install PyQt6

JACK MIDI Support (Wine 11)

WineASIO 1.4.0+ creates JACK MIDI ports for routing MIDI between your DAW and other JACK applications.

MIDI Ports

When WineASIO connects to JACK, it registers:

  • WineASIO:midi_in - MIDI input (receives MIDI from other JACK clients)
  • WineASIO:midi_out - MIDI output (sends MIDI to other JACK clients)

Verify MIDI Ports

jack_lsp | grep -i midi

You should see:

WineASIO:midi_in
WineASIO:midi_out

Connecting MIDI Devices

Use jack_connect, QjackCtl, or Carla to route MIDI:

# Connect a hardware MIDI input to WineASIO
jack_connect "system:midi_capture_1" "WineASIO:midi_in"

# Connect WineASIO MIDI output to a synth
jack_connect "WineASIO:midi_out" "Yoshimi:midi_in"

Using with a2jmidid

If your MIDI devices appear as ALSA MIDI (not JACK), use a2jmidid to bridge them:

# Start the ALSA-to-JACK MIDI bridge
a2jmidid -e &

# Now ALSA MIDI devices appear as JACK MIDI ports
jack_lsp | grep a2j

Relationship with Wine ALSA MIDI

Wine uses winealsa.drv for Windows MIDI API support (separate from WineASIO). The WineASIO JACK MIDI ports provide an additional routing option specifically for JACK-based workflows.


Troubleshooting

Settings GUI doesn't open

  1. Ensure wineasio-settings is in PATH: which wineasio-settings
  2. Check PyQt is installed: python3 -c "from PyQt5.QtWidgets import QApplication"
  3. Try launching manually: wineasio-settings

JACK MIDI ports not visible

  1. Ensure JACK is running: jack_lsp
  2. Verify WineASIO is connected: jack_lsp | grep WineASIO
  3. For ALSA MIDI devices, use a2jmidid -e to bridge to JACK

Wine 11: β€œUnix library not found”

Ensure both PE and Unix libraries are installed:

# Check files exist
ls -la /opt/wine-stable/lib/wine/x86_64-windows/wineasio64.dll
ls -la /opt/wine-stable/lib/wine/x86_64-unix/wineasio64.so

Wine 11: DLL not loading

Make sure the DLL is marked as a Wine builtin:

sudo winebuild --builtin /opt/wine-stable/lib/wine/x86_64-windows/wineasio64.dll

JACK not connecting

  1. Ensure JACK is running: jack_lsp
  2. Check WineASIO JACK client: jack_lsp | grep -i wine
  3. Use QjackCtl or Carla to manage connections

32-bit apps not finding WineASIO

32-bit Windows apps use WoW64. Ensure:

  • wineasio.dll is in i386-windows/
  • wineasio.so is in i386-unix/
  • Register with 32-bit regsvr32: wine ~/.wine/drive_c/windows/syswow64/regsvr32.exe wineasio.dll

Technical Details (Wine 11 Architecture)

Wine 11 requires a split architecture:

Component Description Built With
wineasio64.dll 64-bit PE DLL (Windows code) mingw-w64
wineasio64.so 64-bit Unix library (JACK interface) gcc
wineasio.dll 32-bit PE DLL (Windows code) mingw-w64
wineasio.so 32-bit Unix library (JACK interface) gcc

The PE DLL handles:

  • COM/ASIO interface
  • Registry configuration
  • Host application callbacks

The Unix SO handles:

  • JACK connection and audio processing
  • Real-time audio callbacks
  • Buffer management

Communication between PE and Unix uses Wine's __wine_unix_call interface.


File Structure

wineasio-1.3.0/
β”œβ”€β”€ asio_pe.c           # PE-side code (Wine 11)
β”œβ”€β”€ asio_unix.c         # Unix-side code (Wine 11)
β”œβ”€β”€ unixlib.h           # Shared interface definitions
β”œβ”€β”€ Makefile.wine11     # Wine 11+ build system
β”œβ”€β”€ Makefile            # Legacy build system
β”œβ”€β”€ asio.c              # Legacy combined code
β”œβ”€β”€ wineasio.def        # Export definitions
β”œβ”€β”€ ntdll_wine.def      # 64-bit ntdll imports
β”œβ”€β”€ ntdll_wine32.def    # 32-bit ntdll imports
β”œβ”€β”€ gui/                # PyQt control panel
β”‚   β”œβ”€β”€ settings.py     # Main settings GUI
β”‚   β”œβ”€β”€ ui_settings.py  # UI definitions
β”‚   └── launcher/       # Windows launcher sources
└── docker/             # Docker build environment

Change Log

1.4.0 (Wine 11 Port) - January 2025

  • NEW: Full Wine 11 support with new PE/Unix split architecture
  • NEW: Makefile.wine11 for building with Wine 10.2+/11
  • NEW: Separate PE DLL and Unix SO builds
  • NEW: Support for __wine_unix_call interface
  • NEW: 32-bit and 64-bit builds with proper WoW64 support
  • NEW: Settings GUI integration - launch from DAW's ASIO control panel
  • NEW: JACK MIDI ports (WineASIO:midi_in, WineASIO:midi_out)
  • NEW: Windows launcher executables for GUI (wineasio-settings*.exe)
  • Added asio_pe.c - Windows-side ASIO implementation
  • Added asio_unix.c - Unix-side JACK implementation (with MIDI support)
  • Added unixlib.h - Shared interface definitions
  • Added export definition files for Wine compatibility

1.3.0

  • 24-JUL-2025: Make GUI settings panel compatible with PyQt6 or PyQt5
  • 17-JUL-2025: Load libjack.so.0 dynamically at runtime
  • 17-JUL-2025: Remove useless -mnocygwin flag
  • 28-JUN-2025: Remove dependency on asio headers

1.2.0

  • 29-SEP-2023: Fix compatibility with Wine > 8
  • 29-SEP-2023: Add wineasio-register script

1.1.0

  • 18-FEB-2022: Various bug fixes
  • 24-NOV-2021: Fix compatibility with Wine > 6.5

1.0.0

  • 14-JUL-2020: Add packaging script
  • 12-MAR-2020: Fix control panel startup
  • 08-FEB-2020: Fix code to work with latest Wine
  • 08-FEB-2020: Add custom GUI for WineASIO settings

Contributing

Contributions are welcome! Please test with:

  • Wine 11.x (new architecture)
  • Various DAWs (FL Studio, Reaper, Ableton, Bitwig, etc.)
  • Both 32-bit and 64-bit applications

Copyright (C) 2006 Robert Reif
Portions copyright (C) 2007 Ralf Beck
Portions copyright (C) 2007 Johnny Petrantoni
Portions copyright (C) 2007 Stephane Letz
Portions copyright (C) 2008 William Steidtmann
Portions copyright (C) 2010 Peter L Jones
Portions copyright (C) 2010 Torben Hohn
Portions copyright (C) 2010 Nedko Arnaudov
Portions copyright (C) 2011 Christian Schoenebeck
Portions copyright (C) 2013 Joakim Hernberg
Portions copyright (C) 2020-2023 Filipe Coelho
Portions copyright (C) 2025 Wine 11 Port Contributors

The WineASIO library code is licensed under LGPL v2.1, see COPYING.LIB for more details.
The WineASIO settings UI code is licensed under GPL v2+, see COPYING.GUI for more details.