Releases: dechamps/ASIO401
Releases · dechamps/ASIO401
ASIO401 2.0
Major changes
- 🎉🎉🎉 ASIO401 now supports the QA403 and QA402 audio analyzers! 🎉🎉🎉 (see usage docs)
- 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 aCreateBuffers()
call. See dechamps/FlexASIO#122. - 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 frombufferSwitch()
, 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
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.
- This can be customized using the new
Minor improvements
- ASIO401 now converts the buffers from QA401 endianness (big-endian) to host endianness (little-endian), i.e. from
ASIOSTInt32MSB
toASIOSTInt32LSB
.- 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
🎉 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 toASIO401Test
.
ASIO401 0.2
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
Early prototype of ASIO401. Only supports output channels. Unpolished in many ways.