FlexASIO

A flexible universal ASIO driver that uses the PortAudio sound I/O library. Supports WASAPI (shared and exclusive), KS, DirectSound and MME.

OTHER License

Stars
1.4K

Bot releases are visible (Hide)

FlexASIO - FlexASIO 1.10b Latest Release

Published by github-actions[bot] 5 months ago

This is a hotfix release to address a regression in FlexASIO 1.10 that can result in hangs/freezes in some applications (most notably, Cycling 74' Max 8) that do not signal outputReady() for the last bufferSwitch() while stopping. See #235.

FlexASIO - FlexASIO 1.10a

Published by github-actions[bot] 5 months ago

This is a hotfix release to address a severe regression in FlexASIO 1.10 that can prevent FlexASIO from working with many applications. See #231.

FlexASIOTest was also improved so that it will be able to catch this particular issue in the future.

FlexASIO - FlexASIO 1.10

Published by github-actions[bot] 5 months ago

WARNING: a severe bug has been identified in this release that can prevent FlexASIO from working with many applications. See #231. It is strongly recommended to use FlexASIO 1.10b instead.

Significant changes

  • The default DirectSound backend is now capable of transporting floating-point and 24-bit integer samples. Previously it would always downconvert to 16-bit. See PortAudio/portaudio#774.
  • The MME backend is now capable of transporting floating-point and 24-bit integer samples. Previously it would always downconvert to 16-bit. See PortAudio/portaudio#796.
  • Fix issue where FlexASIO could crash applications or otherwise cause erratic behavior after it is deinitialized, especially if that is done repeatedly. See #209.
    • This is suspected to be the root cause of Dorico crashes. See #208.
    • More generally, the config watcher code has been revamped to be more robust and more efficient.
  • Fix issue where FlexASIO would crash some applications that already link with PortAudio directly (e.g. Mixxx, Polyphone). See #182.
    • This was originally fixed in FlexASIO 1.5 (see #47), but regressed again in FlexASIO 1.8.
  • Fix issue where FlexASIO would crash applications that attempt to use multiple FlexASIO instances at the same time. See #183, #230.

Minor changes

  • Sample rate probing is now more efficient and should return correct results even while an exclusive stream is running. See #188, #66.
    • Previously, FlexASIO would report all sample rates as available while an exclusive stream is running.
  • Fix issue where WDM-KS is not able to probe sample rates of WaveRT-based devices, and is not able to open them if the suggested latency is zero. See #159, PortAudio/portaudio#761.
  • Fix issue where WDM-KS would produce glitchy recordings from WaveRT-based devices. See PortAudio/portaudio#752.
  • Fix issue where FlexASIO may output corrupted audio if an application readies output buffers after returning from bufferSwitch(). See #180.
  • The maximum sample rate has been increased from 384 kHz to 768 kHz. See PortAudio/portaudio@ed922d949c34402a815231a2fc5146a8b4c024c9.
  • Fix a potential issue where FlexASIO would reject control panel calls if they are made before initialization. See #184.
  • Fix a bug in FlexASIOTest where it would always operate in "inhibit OutputReady()" mode even if the --inhibit-output-ready command line option wasn't passed.
FlexASIO - FlexASIO 1.9

Published by dechamps over 2 years ago

Significant changes

  • FlexASIO now supports a new PortAudio feature: WASAPI loopback recording.
    • This takes the form of new WASAPI input devices whose name end with [Loopback]. These devices make it possible to capture the output of the corresponding output device ("record what you hear"). See #150, PortAudio/portaudio#668.
    • For more information, see the updated WASAPI documentation.

Minor changes

  • FlexASIO will now refrain from logging if the logfile size exceeds 1 GB. See #146.
    • This is to avoid accidental disk space exhaustion when forgetting to remove the logfile.
  • Fix potential compatibility issues with some ASIO host applications (e.g. Audio Precision) that make ASIO calls with invalid/bogus sample rates. See #135.
  • PortAudio was updated to latest master.
FlexASIO - FlexASIO 1.8

Published by dechamps about 3 years ago

Significant changes

  • Fix a bug that could prevent some applications from working with FlexASIO. See #122.
    • One example of an affected application is vvvv. More generally this affects all applications based on NAudio.
  • The ASIO "Control Panel" button now opens FlexASIO GUI if it is installed. See #92.

Minor changes

  • PortAudio changes notably include:
    • Fix potential glitching when using WASAPI Exclusive with 24-bit integer sample type. See PortAudio/portaudio#508.
    • Fix bugs with MME buffer size calculation. See PortAudio/portaudio#571.
  • Introduce a new deviceRegex option that makes it possible to match a device name using a regular expression. See #129.
  • The default output of FlexASIOTest is now simpler and easier to read. See #111.
  • The installer won't open the README in silent mode anymore. See #119.
    • Thanks @ThreeDeeJay for providing the fix in #130.
FlexASIO - FlexASIO 1.7a

Published by dechamps almost 4 years ago

This is a hotfix release containing the following changes:

  • Fix a bug where WASAPI Exclusive would wrongly detect the sample type of some 24-bit devices as Float32 (instead of Int24).
    • In FlexASIO 1.7 this could result in failure to initialize; in previous versions this could compromise bit-perfect operation.
    • See #106.
FlexASIO - FlexASIO 1.7

Published by dechamps almost 4 years ago

Due to a format autodetection bug affecting WASAPI Exclusive (see #106), it is recommended to use release 1.7a instead.

Significant changes

  • Improvements have been made to PortAudio WASAPI buffer management, which can potentially reduce glitching when using WASAPI and/or allow the use of smaller buffers and smaller latencies, especially in WASAPI Shared mode. See PortAudio/portaudio#303.
  • FlexASIO now guarantees bit-perfectness in WASAPI Exclusive mode.

Minor changes

  • Fix an edge case where PortAudio could fail to initialize because of a single faulty WASAPI audio device. See PortAudio/portaudio@522f982158d2c7cb3d5ead593eed018821c10d4c.
  • Fix an edge case when using WASAPI where channel names could be incorrect if the Windows audio engine channel count and the native hardware channel count don't match. See #94.
  • Fix potential crashes during initialization due to WDM-KS choking on unusual audio driver configurations. See PortAudio/portaudio#300.
FlexASIO - FlexASIO 1.6

Published by dechamps about 4 years ago

Significant changes

  • FlexASIO can now react to changes to the configuration file while running.
    • A change to FlexASIO.toml will make FlexASIO issue a driver reset request to the application. What happens next is up to the application; ideally, it should reload FlexASIO and pick up the new configuration.
  • When an exclusive stream is currently running, FlexASIO now advertises every sample rate as available. Previously, it advertised none.
    • This prevents applications (most notably Ableton, Cubase, Max MSP) from misbehaving because FlexASIO is unable to probe sample rates while an exclusive stream is active. See #66.

Minor changes

  • A default minimum 10 ms buffer size is now advertised when using DirectSound with an input device (which is the default).
    • This prevents applications (in particular, Pro Tools) from requesting a buffer size that is too small for DirectSound input. See #15.
    • This can always be overridden using the bufferSizeSamples option.
  • A lower limit of 32 samples is now enforced on the default minimum buffer size.
    • This prevents applications (in particular, Max MSP) from misbehaving when faced with very small buffer sizes. See #88.
    • This can always be overridden using the bufferSizeSamples option.
  • PortAudioDevices now displays device names with non-ASCII characters (e.g. accents) correctly when running in a console. See #73.
  • Prevent deadlock when an application's bufferSwitch() callback waits on ASIOStart().
    • This fixes a hang when WASAPI is used with with foobar2000 foo_out_asio. See #60.
  • Benign: fix crash when driver functions are called while uninitialized. See #74.
  • Benign: fix issue with FlexASIOTest not being able to read audio files whose frame size is not a divisor of 12288 (e.g. 6-channel 24-bit).
FlexASIO - FlexASIO 1.5

Published by dechamps over 5 years ago

Significant changes

  • FlexASIO now accepts any sample rate and channel count in WASAPI Shared mode. See #32.
    • This fixes a long-standing annoyance with WASAPI Shared.
    • This is done by instructing WASAPI to convert the sample rate and channel count internally, just like DirectSound and MME already do.
    • This new behaviour is enabled by default but can be disabled using the wasapiAutoConvert option.

Minor changes

  • Fix issue where FlexASIO would crash applications that already link with PortAudio directly (e.g. Polyphone). See #47.
  • Fix issue with FlexASIOTest being unable to read 24-bit files. See #42.
FlexASIO - FlexASIO 1.4

Published by dechamps over 5 years ago

Significant changes

  • Fix a bug where FlexASIO waits until the worst possible time to provide the next output buffer, increasing output latency by one buffer length. See #40.
  • Added support for ASIOOutputReady(), enabling compatible ASIO Host Applications to achieve a one buffer length reduction in output latency. See #4.
  • Speed up the beginning of streaming by providing initial buffers to PortAudio (instead of silence). See #40.
  • Fix a bug where FlexASIO underestimates output latency by one buffer length. See #40.
  • Fix a bug where FlexASIO provides slightly wrong ASIO timestamp information to the Host Application. See #40.
  • Change the directProcess ASIO flag from false to true in buffer switch callbacks. This can potentially improve performance with some ASIO Host Applications. See #40.
  • Various performance improvements that provide more time budget for processing events, making audio glitches (discontinuities) from missed deadlines less likely, especially with small buffer sizes.

Minor changes

  • Many improvements to the FlexASIOTest test program:
    • Add the --input-channels and --output-channels options.
    • Preload the input file before streaming, and write the output file after streaming, to avoid performance issues caused by sound file I/O.
    • Add a --log-mode option to customize the way the log is output.
    • FlexASIOTest.exe has been refactored into a small wrapper around a DLL containing the testing logic, ASIOTest.dll.
    • Fill the first buffer before calling ASIOStart() instead of waiting until the first buffer switch.
    • Optionally call ASIOOutputReady() when an output buffer is filled.
    • Add --buffer-switch-delay-ms option for adding an artificial delay to buffer switch callbacks.
    • Exit cleanly when receiving a CTRL+C signal during streaming.
    • Call ASIOStop() even when streaming failed.
    • Do not wait for a buffer switch if --buffer-switch-count is zero.
  • Ship PDB files in the installer (again) to allow troubleshooting tools (Process Explorer, Process Monitor, Windows Performance Analyzer, WinDbg, etc.) to understand FlexASIO stacks.
FlexASIO - FlexASIO 1.3

Published by dechamps almost 6 years ago

Significant changes

  • When searching for the device name specified in the device option, FlexASIO now ignores devices that are in the wrong direction (input or output). This fixes issues with input and output devices having identical names. See #39.
  • Add --buffer-size-frames, --buffer-switch-count, --input-file, --output-file and --sample-rate command line options to FlexASIOTest. See #34.

Minor changes

  • Fix a crash when returning an ASIO error message longer than 123 characters.
  • Make FlexASIOTest text output I/O asynchronous to avoid blocking in real-time code paths (e.g. ASIO buffer switch callback)
  • Improve FlexASIOTest text output by making it display timestamps, process IDs, and thread IDs.
  • PortAudioDevices now outputs the PortAudio debug log to stderr (as opposed to the FlexASIO log).
  • PortAudioDevices now outputs device names in quotes to avoid confusion when device names end with whitespace.
FlexASIO - FlexASIO 1.2

Published by dechamps almost 6 years ago

Significant changes

  • FlexASIO is now bundled with the latest PortAudio master (76e31c2) instead of the stable version (pa_stable_v190600_20161030). This brings the following improvements:
FlexASIO - FlexASIO 1.1

Published by dechamps almost 6 years ago

This is a bugfix release focused on fixing audio discontinuities (glitches) issues related to full duplex operation and compatibility with the REW host application.

Significant changes

  • The default value for the suggestedLatencySeconds option was changed from zero to 3 times the ASIO buffer length.
    • This fixes issues with audio glitches (discontinuities) when running in full duplex mode.
    • Users who care about latency might want to explicitly set this option back to zero if it works for them.
  • Work around a bug in the REW host application which sets the ASIO sample rate incorrectly. See #31.
    • FlexASIO would always use its default sample rate even if a different one was selected in REW, resulting in audio playing too slow or too fast.

Minor changes

  • FlexASIO now refuses to initialize when an input device is accidentally set as the output device, or vice-versa.
FlexASIO - FlexASIO 1.0

Published by dechamps almost 6 years ago

🎉 This is the first official stable release of FlexASIO. 🎉

Significant changes

  • Add the sampleType configuration option which can be used to customize the sample format. Previously, FlexASIO would always use 32-bit float as the sample type. See #13.
  • When using WASAPI Exclusive mode, FlexASIO will now try to guess the device native sample type and use that, instead of the 32-bit float default. See #13.
  • If only input channels or only output channels are used, FlexASIO will only open the corresponding device, not both. See #24.
  • Related to the above, FlexASIO will now accept a sample rate as long as the input or output device can accept it. Previously, both devices had to accept the sample rate. See #24.
    • This means that WASAPI Shared is now significantly easier to use when using only a single device.
    • When using both input and output devices, you still need matching sample rates for WASAPI Shared to work.
  • Change the default value of the suggestedLatencySeconds configuration option to 0.0, as this seems to be the most sensible value regardless of use case. See #8.
    • This significantly improves FlexASIO latency in the default configuration.

Minor changes

  • Fix a bug where FlexASIO would fail to initialize if there are no audio input devices (or no audio output devices) installed. See #28.
  • Fix a bug where FlexASIO would drop the first few audio buffers just after the stream started. See #27.
  • Add a Frequently Asked Questions page.
  • Overall documentation clean up and improvements.
  • The parsed configuration is now dumped to the log. See #26.
  • Fix a potential race condition around sample position and timestamps.
  • FlexASIOTest now supports sample rates other than 48 kHz.
  • The FlexASIO source code has been moved to an src/ subfolder to declutter the GitHub home page.
FlexASIO - FlexASIO 0.5a

Published by dechamps almost 6 years ago

A few last minute additions to FlexASIO 0.5.

  • Fix a bug in 0.5 that prevented WDM-KS from initializing. (Not that much of a regression, since WDM-KS was nearly unusable in 0.4, and was not selectable in previous versions.) With that fix WDM-KS is now operational, but make sure to read the updated documentation in BACKENDS to understand the limitations. Fixes #21.
  • FlexASIO will now probe the capabilities of the ASIO host application, and log the results. This will be useful to understand what features are supported by host applications and are therefore worth implementing in the future.
FlexASIO - FlexASIO 0.5

Published by dechamps almost 6 years ago

You probably want FlexASIO 0.5a. For some reason GitHub is showing the releases in the wrong order.

Significant changes

  • Add the device configuration option which can be used to change the hardware audio device that FlexASIO will use, instead of using the backend default device. It can also be used to disable the input or output side. See CONFIGURATION for details. Closes #22.
  • Add PortAudioDevices, a command-line utility that outputs detailed information about the list of PortAudio devices. Mainly useful for setting the new device configuration option.
  • Add the channels configuration option which can be used to customize the hardware audio device channel count. See CONFIGURATION for details. Closes #25.
  • Add the bufferSizeSamples configuration option which can be used to customize the suggested ASIO buffer size, instead of the 20 ms default. See CONFIGURATION for details. Closes #19.
  • Add the suggestedLatencySeconds configuration option which can be used to customize the latency hint that is provided to PortAudio. See CONFIGURATION for details. Closes #20.

With the new bufferSizeSamples and suggestedLatencySeconds options, FlexASIO is now theoretically capable of ultra-low-latency operation. See the example in CONFIGURATION for a set of options to use as a starting point.

Minor changes

  • The default ASIO buffer sizes have changed slightly. The new default behaviour is to advertise minimum, preferred and maximum buffer sizes of 1 ms, 20 ms and 1 s, respectively, at whatever sample rate FlexASIO is set to. Previously, the buffer size did not depend on the sample rate.
  • The default PortAudio "suggested latency" is now set to the ASIO buffer size. Previously, FlexASIO would use the "default low latency" number from the PortAudio device information.
  • Lots of additional detail added to log messages.
  • Core FlexASIO business logic code underwent a lot of refactoring. Watch out for regressions.
  • The FlexASIO license has changed from GPL to MIT.

Built from commit 0d26439b6930a40da8f5f77a7841b2366cc79a78 with Visual Studio 2017 15.8.7, Visual C++ runtime 14.15.26706, ASIO SDK 2.3.1, PortAudio pa_stable_v190600_20161030.

FlexASIO - FlexASIO 0.4

Published by dechamps almost 6 years ago

Significant changes

  • The default backend used by FlexASIO has changed from WASAPI Shared to DirectSound.
    • The goal of this change is to reduce user frustration by making it more likely that FlexASIO will "just work" out of the box; this sidesteps the whole sample rate shenanigans that were required to make WASAPI Shared work.
    • Note that this has significant implications in terms of latency and the overall behaviour of the audio pipeline; see BACKENDS for details.
    • To go back to the previous WASAPI Shared backend, simply set backend = "Windows WASAPI" in your configuration file (see below).
  • FlexASIO behaviour can now be customized using a configuration file. See CONFIGURATION for details.
  • New configuration option: backend, which can be used to change the backend that FlexASIO uses. It can be set to any PortAudio-supported host API, such as MME, DirectSound, WASAPI, or WDM-KS. See BACKENDS for details.
  • New configuration option: wasapiExclusiveMode, which can be used to choose between the shared and exclusive WASAPI modes.

Minor changes

  • Attempting to open the FlexASIO "control panel" (settings button) will now display the configuration documentation, instead of doing nothing.
  • Fix a FlexASIOTest crash when driver initialization fails.

Built from commit 2c2763255c5294d9a0fc31203992115da9ec90d7 with Visual Studio 2017 15.8.7, Visual C++ runtime 14.15.26706, ASIO SDK 2.3.1, PortAudio pa_stable_v190600_20161030.

FlexASIO - FlexASIO 0.3a

Published by dechamps almost 6 years ago

Hotfix release that fixes a grave regression introduced in 0.3 that made it impossible to install FlexASIO on Windows 7. See #15. (Windows 8 and greater is not affected.)

FlexASIO - FlexASIO 0.3

Published by dechamps almost 6 years ago

Significant changes

  • Fix a grave bug that can make it impossible to open the audio stream. This can happen under somewhat random conditions, though it seems more likely to happen in 32-bit mode. Closes #14.
  • Fix a grave bug that made FlexASIO-provided timing information unusable. The timestamps and sample counts reported by FlexASIO were completely corrupted, potentially causing erratic behaviour in host applications. Closes #9.
  • FlexASIO will now log to a text file, instead of requiring the use of a debugger to get the logs. Closes #5. See the README for details.
  • Redirect the PortAudio debug output to the FlexASIO log. Closes #4.
  • Add FlexASIOTest, a command-line self-test utility to help testing and troubleshooting FlexASIO. Closes #7. See the README for details.

Minor changes

  • Romove the Microsoft Visual C++ redistributable installers that were introduced in 0.2; go back to shipping the MSVC runtime DLLs directly to address the reboot issue in #12.
  • Fix a bug where FlexASIO would violate the ASIO specification by not zero-filling the reserved fields in timing-related data structures.
  • Make FlexASIO behaviour more similar to the canonical ASIO SDK example by not setting the speed field in timing-related data structures.
  • Increase the resolution of timestamps that are reported to the ASIO host application.
  • FlexASIO log lines now include a precise ISO 8601 timestamp. This might make it easier to troubleshoot performance or timing-related issues.
  • Include detailed FlexASIO build information, PortAudio build information, and host process information in the FlexASIO log.
  • FlexASIO log lines now include the Process ID and Thread ID. This makes it easier to understand the log in context and to troubleshoot race conditions.
  • Include version metadata in .dll and .exe file (can be seen in e.g. the "Details" tab on file properties).
  • Install the 64-bit (x64) and 32-bit (x86) binaries in different subfolders to make it easier to bundle dependent DLLs.
  • Ship PDB files with the installer to make it possible for end users to get proper thread stacks.
  • Remove version information from registry.

Built from commit d42407fd39ea26ca3017c3086ba91fe943ccdaa5 with Visual Studio 2017 15.8.7, Visual C++ runtime 14.15.26706, ASIO SDK 2.3.1, PortAudio pa_stable_v190600_20161030.

FlexASIO - FlexASIO 0.2

Published by dechamps about 6 years ago

  • 64-bit ASIO host application support.
  • Installer now cleanly installs the MSVC++ runtime instead of using local DLLs.

Built from commit 2bc9eeb1c4038bece20ff86751cb8a15f17df618 with Visual Studio 2017 15.8.7, Visual C++ runtime 14.15.26706, ASIO SDK 2.3.1, PortAudio pa_stable_v190600_20161030.