Skip to content

Releases: dechamps/ASIO401

ASIO401 2.0

15 May 21:51
Compare
Choose a tag to compare

Major changes

  • 🎉🎉🎉 ASIO401 now supports the QA403 and QA402 audio analyzers! 🎉🎉🎉 (see usage docs)
    • This includes configurable input and output scales, as well as support for the additional sample rates.
    • This comes in addition to the QA401, which is still fully supported.
    • With my thanks to Matt Taylor from QuantAsylum for his help understanding the QA403/QA402 protocol and behavior.
    • See #23.
  • New configuration option: fullScaleInputLevelDBV
    • This is used to configure the QA40x input gain.
    • This replaces the attenuator option, which is now deprecated as it is not flexible enough for the QA403/QA402 which has more than two input gain levels.
  • New configuration option: fullScaleOutputLevelDBV
    • This is used to configure the QA403/QA402 output gain.
  • Fix a bug that could prevent applications from working with ASIO401 if they issued a GetLatencies() call before a CreateBuffers() call. See dechamps/FlexASIO#122.
    • One example of an affected application is vvvv. More generally this affects all applications based on NAudio.
  • The core streaming logic of ASIO401 underwent a complete rewrite.
    • The new logic uses a double buffering mechanism on the backend side to make ASIO401 much more resilient to glitches/dropouts from missed thread scheduling deadlines, especially at higher sample rates.
    • The priming logic was also improved to be more efficient, less prone to glitches, and more compliant with the ASIO spec.

Minor changes

  • ASIO401 will now reject buffer sizes that are not multiples of 32 (for the QA401) or 64 (for the QA403/QA402) if output channels are used.
    • Indeed it has been observed that the hardware will output garbled audio with such buffer sizes.
  • ASIO401 will now abort pending I/O on stop.
    • This should make the driver more responsive to stop commands, especially when large buffer sizes are used.
  • Fix a bug where, if an host application calls OutputReady() after returning from bufferSwitch(), ASIO401 may output corrupted audio. See dechamps/FlexASIO#180.
  • Incorrect calls made by the host application on an uninitialized driver will now return an error instead of crashing. See #20.
  • ASIO401 will now refrain from logging if the logfile size exceeds 1 GB. See dechamps/FlexASIO#146.
    • This is to avoid accidental disk space exhaustion when forgetting to remove the logfile.
  • Fix a bug in ASIO401Test where it would always operate in "inhibit OutputReady()" mode even if the --inhibit-output-ready command line option wasn't passed.
  • ASIO401Test default text output is now less verbose and more readable.

ASIO401 1.1

03 Feb 14:59
Compare
Choose a tag to compare

Significant improvements

  • Invert the polarity of all channels except the left input channel, such that a positive sample value always translates to a positive voltage on the + terminal. See #14.
  • Fix a bug where the left and right channels were swapped (both input and output). See #13.
  • Added support for ASIOOutputReady(), enabling compatible ASIO Host Applications to achieve a one buffer length reduction in output latency. See #4.
  • ASIO401 will not read from the QA401 anymore if no input channels are enabled. This comes at the expense of output latency. See #12.
    • This can be customized using the new forceRead configuration option.

Minor improvements

  • ASIO401 now converts the buffers from QA401 endianness (big-endian) to host endianness (little-endian), i.e. from ASIOSTInt32MSB to ASIOSTInt32LSB.
    • This is necessary for ASIO401 to be able to fix the sample sign (polarity) - see above.
  • Skip the initial priming read if no input channels are enabled.
  • Ship PDB files in the installer to allow troubleshooting tools (Process Explorer, Process Monitor, Windows Performance Analyzer, WinDbg, etc.) to understand ASIO401 stacks.
  • Fix a crash in ASIO401Test when selected input or output channels do not start consecutively from zero.

ASIO401 1.0

27 Jan 19:18
Compare
Choose a tag to compare

🎉 This is the first stable release of ASIO401, suitable for general consumption. 🎉

Significant improvements

  • The QA401 priming, starting and streaming logic has been revamped to resolve issues related to various DC garbage and distortion appearing at the QA401 outputs at the beginning of streaming. See #9.
  • 192 kHz sample rate is now supported. See #2.
  • Fix a bug where ASIO401 would get stuck if all output channels are disabled. See #10.
  • Fix the ASIO Timestamp information which was completely broken. See #1.
  • Throw away the first 1024 samples coming from the QA401 inputs, which are typically garbage (silence and/or "ghost" samples leaking from previous streams). See #5.
  • Enable the QA401 hardware input high-pass filter. See #7.

Minor improvements

  • Mention "Left" and "Right" in channel names.
  • ASIO401 now handles USB errors during streaming (e.g. device disconnect) more gracefully, and will send a reset request to the ASIO Host Application instead of crashing.
  • Various performance improvements that provide more time budget for processing events, making audio glitches (discontinuities) from missed deadlines less likely, especially at 192 kHz.
  • Add the --input-channels and --output-channels options to ASIO401Test.

ASIO401 0.2

20 Jan 19:43
Compare
Choose a tag to compare

Significant improvements

  • Audio input (recording) is now supported.
  • Added the attenuator configuration option to disengage the QA401 hardware attenuator.
  • Rewritten buffer management logic to improve stability and compatibility with host applications.
  • USB I/O is now done asynchronously. USB reads, writes and buffer switch callbacks now happen in parallel with each other, relaxing timing constraints.
  • Reset the QA401 when streaming stops. This works around an hardware issue where DC offset could appear in the outputs at the end of playback.
  • Fix a performance bug that could result in glitches due to buffer switches being delayed by as much as 10 ms, depending on the host application.
  • Fix a bug where ASIO401 would accept any sample rate, even though it only runs at 48 kHz.

Minor improvements

  • Change the default buffer size from 256 samples to 1024 samples.
  • Wait until some output buffers are queued up before starting the hardware.
  • Increase the scheduling priority of the streaming thread (MMCSS "Pro Audio" class).
  • Improve efficiency when no output channels are enabled by not writing to the output USB pipe in that case.
  • Fix a bug where the very first output buffer filled by the ASIO Host Application would be dropped.
  • Fix a bug where the reported timestamp would be zero in the first buffer switch callback.
  • Make the reported latency numbers are bit more accurate.
  • Many improvements to the ASIO401Test program:
    • Support big endian output in an AIFF container.
    • 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.
    • 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.

ASIO401 0.1

13 Jan 21:03
Compare
Choose a tag to compare

Early prototype of ASIO401. Only supports output channels. Unpolished in many ways.