Qa40x_V2 Version 0.1

The next version of Qa40x is getting close, and it would be a big help if those on non-PC platforms could try and report what they see. The zip is located HERE.

1. Download and Unzip

Download the zip and unzip. There’s no installer.

2. Running

For Windows, you can go into the unzipped directory and run qa40x.exe directly.

For Linux/Mac, you will need the dotnet 8.0 runtime installed. On Ubuntu, for example, that looks like this:

sudo apt-get install -y dotnet-runtime-8.0

With the dotnet runtime installed, you can switch to the unzipped directory and run the app with:

dotnet Qa40x.dll

You might get a Skia compat issue (The version of the native libSkiaSharp library (88.1) is incompatible with this version of SkiaSharp.). If so, let me know.

Next, watch for an issue with libusb. If you see:

libusb-1.0 was not found

install the Linux system package:

Ubuntu / Debian

sudo apt install libusb-1.0-0

Fedora

sudo dnf install libusb1

Arch

sudo pacman -S libusb

Unversioned Symlink Issue

LibUsbDotNet may look for libusb-1.0.so while the OS only provides libusb-1.0.so.0.

Check what exists:

find /lib /usr/lib -name 'libusb-1.0.so*' 2>/dev/null

If libusb-1.0.so is missing, either install the development package:

sudo apt install libusb-1.0-0-dev

or create the symlink manually, for example on Ubuntu x64:

cd /lib/x86_64-linux-gnu
sudo ln -s libusb-1.0.so.0 libusb-1.0.so
sudo ldconfig

3. Linux: USB Device Not Found

If the log shows:

Usb.Open failed: Usb.Open(): Device Not Found.

then the native USB library is loading correctly, but Qa40x cannot find the analyzer.

The current code looks for this USB VID/PID:

16c0:4e39

Check detection with:

lsusb
lsusb -d 16c0:4e39

If nothing is returned, check:

  • The QA403 is connected
  • The device is powered
  • The cable is good
  • The device is not attached to another host, VM, or container
  • The firmware is exposing the expected VID/PID

4. Linux: USB Permissions

If lsusb -d 16c0:4e39 shows the device but the app still cannot use it, add a udev rule:

sudo tee /etc/udev/rules.d/99-qa403.rules >/dev/null <<'EOF'
SUBSYSTEM=="usb", ATTR{idVendor}=="16c0", ATTR{idProduct}=="4e39", MODE="0666"
EOF
sudo udevadm control --reload-rules
sudo udevadm trigger

Then unplug and reconnect the device.

5. Linux: Useful Diagnostics

Check whether the USB device is visible:

lsusb -d 16c0:4e39

Check libusb sonames:

find /lib /usr/lib -name 'libusb-1.0.so*' 2>/dev/null

Inspect the deployed Skia native library:

find . -name 'libSkiaSharp.so'

Run the app:

dotnet Qa40x.dll

Running the App

With versions and usb issues addressed, the app should come up in one of nine languages. English (en), Deutsch (de), Espanol (es), Francais (fr), Italiano (it), Japanese (ja), Korean (ko), Portugues (Brazil) (pt-BR), Chinese (Simplified) (zh-Hans). You can force a language via the command line. For example,

dotnet Qa40x.dll --lang fr

will force French.

The app should come up looking as below:

TASK:

Confirm app will show the selected language. The language may be spotty as localization is mechanical and not all the way up to date. The key is if you see SOME strings rendering.

Trace Activity

In the two lower windows, you’ll should see activity. The lower two windows are connected to a C# trace generator that runs and updates every 250 mS or so. This can be turned off by locating the C# Trace Generator tile, and clicking the gear.

That will open the generator properties:

Uncheck the Loop Generation and hit Apply. The updates should stop. Close the app and restart it.

TASK:

Confirm on re-start that the generator is no longer autogenerating. This means that the app has persisted settings successfully.

PC Audio Generation

Click the global settings gear:

Select the PC Audio Tab, select your DAC output (ADC isn’t yet connected) device and click the test button. You should hear a one second tone.

TASK

Confirm you can generate a tone on your local hardware.

Connecting the QA403 Hardware

Next, plug in the QA403 if not already. The lower left should show Idle (it currently shows Idle if the QA403 is recognized or not).

near the top of the app you’ll see a series of play/pause buttons:

Press the rightmost button. This will start bursted activity with the analyzer and you’ll see time domain display in the upper left and freq domain displayed in the upper right. To change input levels or experiment with autoranging, do the following: Stop the analyzer USB activity. Right click global settings gear, click on Generator tab, set the sine generation to whatever you want (greater than -20 dBV). The select the Opt THD+N or Opt THD. Connect and disconnect the loopback cable to initiate with the analyzer running, and also start and stop the acq. Depending on the button you select the system will automatically optimize for best THD or THDN as incoming levels change.

That’s it for this phase. The tasks were:

  • Confirm localization appears
  • Confirm file system persistence
  • Confirm local tone generation
  • Confirm USB operation (should be nearly rock solid)

Please leave your results here (include platform (Win/Mac/Linux + OS ver) or send mail to support at quantasylum.

Thanks, Matt

3 Likes

I guess what you posted would be understood by a programmer, but that software jargon was way beyond anything I, as a general audio tech, can understood or can figure out. As a non-programmer Mac user, I have no idea how to implement your instructions. You asked for analysis and input…

Hi @matt. I ran a quick test to confirm what you asked. Operating system: Windows 10. Everything you asked about has been confirmed. I haven’t tested anything else. I’ll test the same things on Windows 11 as soon as possible.

EDIT I can confirm that I didn’t encounter any issues with the same tests on Windows 11 either

1 Like

I confirm that what you asked works with my system. Windows 11 Pro 64-bit and Intel(R) Core™ Ultra 9 285H.
I’m running several tests and will let you know if anything goes wrong. Thank you so much for this new app.

1 Like

Windows 11 pro 64bit, even forcing en language, I get a mix of italian/english:

1 Like

Hi @Clane, yes, that is expected right now. When 1.0 is released, all the strings will be properly converted. For now, the strings added since the last conversion are still in english. If you see even one string in Italian, that means it correctly detecting and picking the right resource.

Hi @ScottRichardson, yes, agree. It mostly for Linux folks at this point since they have such a broad array of platform options/choices.

1 Like

On a Mac, would I type “sudo apt-get install -y dotnet-runtime-8.0” from the Terminal app? I did that and it prompted for a password. ¯\_(ツ)_/¯

I’m pretty code illiterate, unless everything is explicitly specified, step-by-step. I have been using my QA403 on a Windows laptop I purchased on the used market just for this product and am getting familiar with it. But I REALLY appreciate work on a Mac native app! I had not used Windows in many years and did not miss it! Thanks.

3 Likes

The translation of “Trace pool” into French end up as “Piscine de trace”.

I would translate it to French as “Liste des traces” instead.

“piscine” is really the French for “swimming pool” which has little to do with a QA403.

1 Like

Tested on an Intel desktop with Linux Mint 22.3 (XFCE 64-bit) - only had to do the USB permissions, everything working!

1 Like

Hi. On the logarithmic scale, I find this division into decades a bit odd: there aren’t the usual 10 divisions. Is it possible to adjust this setting? Am I missing something? Thank you

1 Like

Hi All…

As I am in the middle of a project and can’t get into BETA land I had a few questions on the exciting release.

1: Do we have the ability to have a steady state oscillator during FFT analysis?

2: Does the system now have auto range input?

3: Can we monitor the input on the PC or MAC?

Cheers and thanks Matt a bunch for your tireless improvements in this platform. Looks very cool..

Hi @skipburrows,

  1. Yes, everything has been built to enable it, but it will probably be one of the last things worked on before the 1.0 release.

  2. Yes, in the input range select you’ll see two additional buttons: One is to optimize for THDN (noise) the other is to optimize for THD (distortion). This will cause additional measurement to be made to optimize for your preference, giving the autoranging.

.
These additional measurements for autoranging occur up front very early in the pipeline, so you might hear some clicking, and you’ll see [AR] reported in the lower left acq status. But the benefit of it happening early in the pipeline is that downstream measurements aren’t aware it’s happening, and so for the automated tests you no longer need to specify Input Level Range Adder. You just decide if you want to optimize for noise or distortion and everything just works. Once autoranged, it won’t run again until input level changes by +/- 1 dB.

Also in the automated tests you can override global settings. For example, in the Power THD versus Freq test seen below, we have overridden the buffer size and autoranging. But we have accepted the global default for Window. This should make it a lot easier to have a bunch of canned tests. And down the road, imagine the ability to chain together a bunch of automated tests and a final pass/fail. That will effectively pull Tractor into the main app.

  1. Yes, below you’ll see the dac routing block. This isn’t done yet, but you can click on each of the switches you see and watch the change as you click. That changes the routing for the system.

If I click on the switch before the PC DAC in the lower right you can see I’ve selected the ADC monitor. The gain block will let you pick 0/-20/-40 dB. And so, whatever is going into the audio analyzer can be monitored on your PCs speakers (with a few hundred ms of delay)

Also, it’s a bit confusing now since there’s some QA404 stuff mixed in. On the QA404 (when it’s ready isn’t known yet, not in the next 6 months for sure) you can select either XLR input (BAL) or BNC (single ended). You also have the ability to ground the outputs (the drawing is a bit confusing right now as it looks like you are grounding the DAC). But grounding the outputs means you can leave your DUT connected to the analyzer output and make grounded input measurements on your DUT. This is really needed for some of the new Class D amps like Purifi

This first release has a cross platform audio subsystem called PortAudio (whcih I’m hoping more can test above). This is really the enabler for the tighter integration with the QA40x hardware. So, longer term this means flexible switching so you can source analysis from a sound card too. That’s not part of the 1.0 release. But with the routing flexibility and non-bursted mode, should be straightforward to see how it can come together.

Lots more work to do…but again, this 0.1 release was to ensure some of the bigger parts (cross platform audio) are working on lots of different systems.

1 Like

Hi @Yves, in the US you might speak of a “candidate pool” for a job. That is the pool of people that are applying. The thinking here is similar, in that you have a pool of traces. Other similar uses might be a “typing pool” from long ago, “press pool” (whitehouse reporters) or “motor pool” (a fleet of cars). But the implication is something a bit more formal than a list. And elsewhere in the app there are already lists of traces (graphs).

The translations will be switched to DeepL in the near future, and they translate press pool as “pool de presse” and “trace pool” as “pool de traces”

But we can add exceptions, and so if something is confusing it can be corrected by native speakers and that will be important for top-level app concepts.

Hello Matt. The expression ““pool de traces” should be quite good, especially since almost anyone who has some knowledge of electronics does master English at least to a fair level.

Hi Matt, run the Windows version and what I like is the multiple windows on the screen. But unfortunately all other is non-intuitive at least for me. Settings under submenues wtih no show on the main pane what is set with no instant setting change possibility in the main pane. Start and toggle buttons same image without sign what it does. Yes, I know with mouse over button shows it. Is there still the IDLE mode like at the previous version for continues generator output? Would be great that you review the design of the user interface for easy usability and clear show what is set for measurement. Sorry to say but the QA40xPlot is for me much easier to use. All is easy visible and can be modified on the fly.

Hi @Sven, the purpose the 0.1 is to test subsystems. The UI is very far from what will be final, it’s just pieces right now. And each piece needs to be tested on Win/Mac/Linux to confirm they work.

In the final app, there will be a play/pause button for PC and a play/pause button for the analyzer (they are there today, just in different places. You can see the “running man” for automated tests at the top of the app. The PC and analyzer run/stop buttons will end up there most likely). The PC and analyzer will each follow the generator settings. So, whether chirp or sine, the you have one place to set the values and the PC and analyzer will both follow (you will need to specify a mapping from abs to rel). This means if you want to send an expo chirp out of your DAC, you set the system for chirp, hit the PC play button, and you’ll hear it from your PC. And then capture it on the analyzer and you’ll see the freq response of the the PC DAC.

Don’t fret, there’s a lot of change coming. And yes, Qa40xPlot is very good! There’s a chance that Qa40x_v2 will be too complicated for some, and that is OK too. There’s QA40x_v1 and also Qa40xPlot for fallback.

1 Like

Hi Matt, thank you for the fast and clarifying reply. OK, I understand that this is still under development. Will test it when released.

Hi Matt,

will it be possible to use the different versions side by side?

Trying this out on Linux Mint (XFCE).

USB device can be seen:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0bda:5627 Realtek Semiconductor Corp. EasyCamera
Bus 001 Device 003: ID 0cf3:e500 Qualcomm Atheros Communications
Bus 001 Device 007: ID 16c0:4e39 Van Ooijen Technische Informatica QA403 Audio Analyzer
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

But I get this in the terminal window whenever I try to run any function in the new software.

john@john-IdeaPad-1-14IGL05:~/Documents/qa403_v2/net8.0$ dotnet Qa40x.dll
ALSA lib pcm.c:2721:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2721:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2721:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_route.c:878:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:878:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:878:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:878:(find_matching_chmap) Found no matching channel map
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock

1 Like

Hi @restorer-john, do the QA40x acquisitions happen? Can the app play a tone on the PC? Not too sure, but it looks like the PC audio library (PortAudio) is trying to resolve some aliases that might not exist.