An universal ASIO driver that uses the PortAudio universal sound I/O library as a backend for great flexibility.
Clone or download
Permalink
Failed to load latest commit information.
ASIOHost Get sample rate in FlexASIOTest. Oct 21, 2018
FlexASIO Don't attempt to open a PortAudio stream with a null callback. Nov 11, 2018
FlexASIOTest Probe ASIO host messages and log the results. Nov 11, 2018
FlexASIOUtil Probe ASIO host messages and log the results. Nov 11, 2018
PortAudioDevices Refactor the code around WASAPI default device format. Nov 11, 2018
.gitignore Automatically find the VC++ redist binaries during installer build. Oct 21, 2018
BACKENDS.md Document the fact that WDM-KS will fail on devices that are in use. Nov 11, 2018
CONFIGURATION.md Provide an example of low latency operation. Nov 11, 2018
CopyPortAudioPDBs.props Automatically copy PortAudio PDBs from vcpkg to the FlexASIO build. Oct 27, 2018
Debug.props Factor out Debug and Release build options into property sheets. Oct 21, 2018
FlexASIO.props Target the Windows 7 API set. Oct 26, 2018
FlexASIO.sln Add a console application for listing PortAudio devices. Nov 10, 2018
LICENSE.txt Switch from the GPL to the MIT License. Nov 11, 2018
README.md Switch from the GPL to the MIT License. Nov 11, 2018
Release.props Factor out Debug and Release build options into property sheets. Oct 21, 2018
find_visual_studio.ps1 In the installer, create the build directory if it doesn't exist. Oct 27, 2018
installer.iss Don't show the license in the installer. Nov 11, 2018
version.ps1 Provide additional links back to GitHub in the installer. Oct 21, 2018
versioninfo.rc Switch from the GPL to the MIT License. Nov 11, 2018

README.md

FlexASIO README

Author: Etienne Dechamps etienne@edechamps.fr Website: https://github.com/dechamps/FlexASIO License: MIT

If you are looking for an installer, see the GitHub releases page.

DESCRIPTION

Background: http://en.wikipedia.org/wiki/Audio_Stream_Input/Output

FlexASIO is an universal ASIO driver, meaning that it is not tied to specific audio hardware. Other examples of universal ASIO drivers include ASIO4ALL, ASIO2KS, ASIO2WASAPI. Universal ASIO drivers use hardware-agnostic audio interfaces provided by the operating system to produce and consume sound. The typical use case for such a driver is to make ASIO usable with audio hardware that doesn't come with its own ASIO drivers.

While ASIO4ALL and ASIO2KS use a low-level Windows audio API known as "Kernel Streaming" (also called "DirectKS", "WDM-KS") to operate, and ASIO2WASAPI uses WASAPI (in exclusive mode), FlexASIO uses an intermediate library called PortAudio that itself supports a large number of operating system sound APIs, including MME, DirectSound, WDM-KS, as well as the modern WASAPI interface that was released with Windows Vista (ironically, PortAudio can use ASIO as well, nicely closing the circle). Thus FlexASIO can be used to interface with any sound API available on your system. For more information, see BACKENDS.

PortAudio: http://www.portaudio.com/

In particular, FlexASIO makes it possible to open an audio device in so-called "shared" mode like any other application, which makes it an interesting alternative to ASIO4ALL/ASIO2KS/ASIO2WASAPI, as these drivers always open devices in exclusive mode without giving you a choice.

FlexASIO should be able to run on any version of Microsoft Windows, even very old ones, at least in theory. It is compatible with 32-bit and 64-bit ASIO host applications.

HOW TO USE

Just install it and FlexASIO should magically appear in the ASIO driver list in any ASIO-enabled application. There is no graphical configuration interface (see "caveats" below), but there is a way to change some FlexASIO settings through a configuration file; see CONFIGURATION for details.

To uninstall FlexASIO, just use the Windows "add/remove programs" control panel.

If you don't want to use the installer, you can install it manually by simply registering the DLL:

regsvr32 FlexASIO_x64.dll
regsvr32 FlexASIO_x86.dll

Use the /u switch to unregister.

LIMITATIONS AND CAVEATS

This an early version of FlexASIO. It has not been tested in any extensive way, and is certainly not free from bugs and crashes.

FlexASIO doesn't come with a graphical configuration interface ("control panel" in ASIO terminology). The main reason is because programming GUIs takes a lot of time that I don't have (especially since I have zero experience in GUI programming). However, FlexASIO does come with a configuration file that can be used to customize a number of settings, such as the audio backend used (WASAPI, DirectSound, etc.) and audio device selection. Like most of FlexASIO, this is very much a work in progress and more options will be added over time.

If you are using different hardware devices for input and output, each with its own hardware clock, you are likely to end up with glitches sooner or later during playback. How soon depends on the amount of clock drift between the two hardware devices. Note that this is basically a fact of life and is a problem with all audio APIs and drivers; the only way around it is to compensate the clock dift on the fly using sample rate conversion, but that's much more complicated.

FlexASIO has not originally been designed with latency in mind; low latency operation is still a work in progress. Furthermore, the default configuration is optimized for ease of use and reliability, not latency. That said, it should be possible to achieve very low latencies through careful tuning of configuration settings; see the example in CONFIGURATION.

FlexASIO is Windows-only for now. That could change in the future, as PortAudio itself is cross-platform.

TROUBLESHOOTING

Logging

FlexASIO includes a logging system that describes everything that is happening within the driver in an excruciating amount of detail. It is especially useful for troubleshooting driver initialization failures and other issues. It can also be used for verification (e.g. to double-check that FlexASIO is using the device and audio format that you expect).

To enable logging, simply create an empty file (e.g. with Notepad) named FlexASIO.log directly under your user directory (e.g. C:\Users\Your Name Here\FlexASIO.log). Then restart your ASIO host application. FlexASIO will notice the presence of the file and start logging to it.

Note that the contents of the log file are intended for consumption by developers. That said, grave errors should stick out in an obvious way (especially if you look towards the end of the log). If you are having trouble interpreting the contents of the log, feel free to ask for help by opening an issue (see "Reporting Issues", below).

Do not forget to remove the logfile once you're done with it (or move it elsewhere). Indeed, logging slows down FlexASIO, which can lead to buffer underruns (audio glitches). The logfile can also grow to a very large size over time.

Device list program

FlexASIO includes a program that can be used to get the list of all the audio devices that PortAudio (and therefore FlexASIO) knows about, as well as detailed information about each device.

The program is called PortAudioDevices.exe and can be found in the x64 (64-bit) or x86 (32-bit) subfolder in the FlexASIO installation folder. It is a console program that should be run from the command line. It doesn't matter much which one you use.

Test program

FlexASIO includes a rudimentary self-test program that can help diagnose issues in some cases. It attempts to emulate what a basic ASIO host application would do in a controlled, easily reproducible environment.

The program is called FlexASIOTest.exe and can be found in the x64 (64-bit) or x86 (32-bit) subfolder in the FlexASIO installation folder. It is a console program that should be run from the command line.

It is a good idea to have logging enabled while running the test (see above).

Note that a successful test run does not necessarily mean FlexASIO is not at fault. Indeed it might be that the ASIO host application that you're using is triggering a pathological case in FlexASIO. If you suspect that's the case, please feel free to ask for help (see below).

REPORTING ISSUES

Just use the GitHub issue tracker. When asking for help, it is strongly recommended to produce a log (see above) while the problem is occuring, and attach it to your report. The output of FlexASIOTest (see above), along with its log output, might also help.

DEVELOPER INFORMATION

FlexASIO is designed to use the Microsoft Visual C++ 2017 toolchain.

For the build to work you will need to provide these dependencies:

The best way to get these dependencies is to use vcpkg:

vcpkg install portaudio:x64-windows portaudio:x86-windows tinytoml:x64-windows tinytoml:x86-windows

You will also need to provide the ASIO SDK. Download the SDK and copy the ASIOSDK2.3.1 folder to the FlexASIO folder.

The installer can be built using Inno Setup.