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.
Assets 3

@dechamps dechamps released this Jan 27, 2019 · 14 commits to master since this release

🎉 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.
Assets 3

@dechamps dechamps released this Jan 20, 2019 · 40 commits to master since this release

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.
Assets 3

@dechamps dechamps released this Jan 13, 2019 · 71 commits to master since this release

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

Assets 3