I almost forgotten, that in addition to builtin and USB cards there is a lot of other interfaces OCIe, SPDIF etc.
So I have updated device-scanner. https://edgo.org/scope/device-scanner-1.2.1.jar
@Rantapossu & @audio_tony please run it again if there any improvements in card/modes detction.
If yes - I will made bugfix release 1.2.1
Card 0: SMSL USB AUDIO (SMSL SMSL USB AUDIO at usb-0000:05:00.0-2, high speed)
[OUTPUT] Device hw:0,0 -> USB Audio (Subdevices: 1)
--------------------------------------------------
Card 1: Xonar STX (Asus Virtuoso 100 at 0xb000, irq 19)
[OUTPUT] Device hw:1,0 -> Multichannel (Subdevices: 1)
[OUTPUT] Device hw:1,1 -> Digital (Subdevices: 1)
[INPUT ] Device hw:1,0 -> Multichannel (Subdevices: 1)
[INPUT ] Device hw:1,1 -> Digital (Subdevices: 1)
--------------------------------------------------
cat /proc/asound/cards
0 [AUDIO ]: USB-Audio - SMSL USB AUDIO
SMSL SMSL USB AUDIO at usb-0000:05:00.0-2, high speed
1 [STX ]: AV200 - Xonar STX
Asus Virtuoso 100 at 0xb000, irq 19
Phonalyser device scanner
scanned : 2026-08-10 09:09:38
os : Linux 6.1.0-41-amd64 (amd64)
java : 26.0.2 - Oracle Corporation
note : managers built fresh, no caches - every figure below was probed live by this run
JavaSound mixer providers on the class path:
- com.sun.media.sound.DirectAudioDeviceProvider
- com.sun.media.sound.PortMixerProvider
- com.cleansine.sound.provider.SimpleMixerProvider
=== WASAPI ===
not available on this OS (Linux 6.1.0-41-amd64 (amd64))
=== WDM-KS ===
not available on this OS (Linux 6.1.0-41-amd64 (amd64))
=== JavaSound ===
device list: enumerated fresh
INPUT devices:
[0] STX [plughw:1,0] (Direct Audio Device: Xonar STX, Multichannel) - ALSA
32000 Hz: 16 32 bits
44100 Hz: 16 32 bits
48000 Hz: 16 32 bits
88200 Hz: 16 32 bits
96000 Hz: 16 32 bits
176400 Hz: 16 32 bits
192000 Hz: 16 32 bits
[1] STX [plughw:1,1] (Direct Audio Device: Xonar STX, Digital) - ALSA
44100 Hz: 16 32 bits
48000 Hz: 16 32 bits
88200 Hz: 16 32 bits
96000 Hz: 16 32 bits
176400 Hz: 16 32 bits
192000 Hz: 16 32 bits
OUTPUT devices:
[0] AUDIO [plughw:0,0] (Headphone Out) - ALSA
44100 Hz: 32 bits
48000 Hz: 32 bits
88200 Hz: 32 bits
96000 Hz: 32 bits
176400 Hz: 32 bits
192000 Hz: 32 bits
352800 Hz: 32 bits
384000 Hz: 32 bits
705600 Hz: 32 bits
768000 Hz: 32 bits
[1] STX [plughw:1,0] (Direct Audio Device: Xonar STX, Multichannel) - ALSA
32000 Hz: 16 32 bits
44100 Hz: 16 32 bits
48000 Hz: 16 32 bits
88200 Hz: 16 32 bits
96000 Hz: 16 32 bits
176400 Hz: 16 32 bits
192000 Hz: 16 32 bits
[2] STX [plughw:1,1] (Direct Audio Device: Xonar STX, Digital) - ALSA
32000 Hz: 16 32 bits
44100 Hz: 16 32 bits
48000 Hz: 16 32 bits
88200 Hz: 16 32 bits
96000 Hz: 16 32 bits
176400 Hz: 16 32 bits
192000 Hz: 16 32 bits
scan time: 0.1 s
=== CoreAudio ===
not available on this OS (Linux 6.1.0-41-amd64 (amd64))
Ok, I have updated scanner to 1.2.2: https://edgo.org/scope/device-scanner-1.2.2.jar
Please re-run. It should list something like:
INPUT:
AV200 - Xonar STX - Multichannel
AV200 - Xonar STX - Digital
OUTPUT:
SMSL USB AUDIO - Headphone Out
AV200 - Xonar STX - Multichannel
AV200 - Xonar STX - Digital
96000 Hz: [B]16[/B] 32 bits - I note that the SMSL only has two columns: 96000 Hz: 32 bitsPhonalyser device scanner
scanned : 2026-08-11 08:58:58
os : Linux 6.1.0-41-amd64 (amd64)
java : 26.0.2 - Oracle Corporation
note : managers built fresh, no caches - every figure below was probed live by this run
JavaSound mixer providers on the class path:
- com.sun.media.sound.DirectAudioDeviceProvider
- com.sun.media.sound.PortMixerProvider
- com.cleansine.sound.provider.SimpleMixerProvider
=== JavaSound ===
device list: enumerated fresh
INPUT devices:
[0] AV200 - Xonar STX - Multichannel - ALSA
32000 Hz: 16 32 bits
44100 Hz: 16 32 bits
48000 Hz: 16 32 bits
88200 Hz: 16 32 bits
96000 Hz: 16 32 bits
176400 Hz: 16 32 bits
192000 Hz: 16 32 bits
[1] AV200 - Xonar STX - Digital - ALSA
44100 Hz: 16 32 bits
48000 Hz: 16 32 bits
88200 Hz: 16 32 bits
96000 Hz: 16 32 bits
176400 Hz: 16 32 bits
192000 Hz: 16 32 bits
[2] OLIVINE-2 ADC V1.23 - Line In - ALSA
96000 Hz: 24 bits
OUTPUT devices:
[0] AV200 - Xonar STX - Multichannel - ALSA
32000 Hz: 16 32 bits
44100 Hz: 16 32 bits
48000 Hz: 16 32 bits
88200 Hz: 16 32 bits
96000 Hz: 16 32 bits
176400 Hz: 16 32 bits
192000 Hz: 16 32 bits
[1] AV200 - Xonar STX - Digital - ALSA
32000 Hz: 16 32 bits
44100 Hz: 16 32 bits
48000 Hz: 16 32 bits
88200 Hz: 16 32 bits
96000 Hz: 16 32 bits
176400 Hz: 16 32 bits
192000 Hz: 16 32 bits
[2] SMSL USB AUDIO - Headphone Out - ALSA
44100 Hz: 32 bits
48000 Hz: 32 bits
88200 Hz: 32 bits
96000 Hz: 32 bits
176400 Hz: 32 bits
192000 Hz: 32 bits
352800 Hz: 32 bits
384000 Hz: 32 bits
705600 Hz: 32 bits
768000 Hz: 32 bits
scan time: 0.1 s
Nice, thank you for the test. I have also made more tests on my Linux box.Here you are - looks like it's detecting everything correctly now. I'm curious to know; what is the 16 in the Asus output?
96000 Hz: [B]16[/B] 32 bits- I note that the SMSL only has two columns:96000 Hz: 32 bits
I also plugged in my Altor Audio Olivine 2 ADC - and it detected that as well.
OLIVINE-2 ADC V1.23 - Line In - ALSA 96000 Hz: 24 bits
Another interesting quirk. After plugging in the Olivine ADC I thought I'd try phonolyser (local version) again.
I can see the sine on the scope, but the FFT window was displaying nothing. I turned the volume up and done in the ADC and suddenly the FFT burst into life - however it didn't look very good....
Thank you for your work in sorting this out.Nice, thank you for the test.
# Define the asymmetric physical routing
pcm.asym_split {
type asym
playback.pcm "hw:1,0"
capture.pcm "hw:0,0"
}
# Wrap the split in a plug layer for sample rate conversion
pcm.javasound_bridge {
type plug
slave.pcm "asym_split"
}
# Force the system default to use our Java-friendly bridge
pcm.!default {
type copy
slave.pcm "javasound_bridge"
}
ctl.!default {
type hw
card 1
}
Your current .asoundrc is syntactically correct for standard Linux applications, but it is hitting a strict quirk in how JavaSound handles ALSA devices.
Standard Linux apps see your asym layout as one device. However, JavaSound interacts with ALSA by querying the system mixers via getMixerInfo(). It loops through hw:0 (your Xonar STX) and hw:1 (your SMSL DAC) individually, but it completely ignores pcm.!default if it is configured as an asymmetric compound device without an explicit configuration name that maps to Java's expected hardware structure.
To force JavaSound to see a single, unified device containing both playback and capture capabilities, update your ~/.asoundrc to include a dedicated Java-compatible plug layer like this: (see ~./asoundrc above)
output:
channels: LINKED
ranges:
- { label: "default", fsVrms: { left: 1.0, right: 1.0 } }
activeRange: "default"
- name: SMSL USB AUDIO - Headphone Out
match: [ "SMSL USB AUDIO - Headphone Out" ]
output:
channels: LINKED
ranges:
- { label: "default", fsVrms: { left: 0.7071067811865475, right: 0.7071067811865475 } }
activeRange: "default"
bindings:
"SMSL USB AUDIO - Headphone Out": "SMSL USB AUDIO - Headphone Out"
output:
channels: LINKED
ranges:
- { label: "default", fsVrms: { left: 1.0, right: 1.0 } }
activeRange: "default"
- name: SMSL USB AUDIO - Headphone Out
match: [ "SMSL USB AUDIO - Headphone Out" ]
output:
channels: LINKED
ranges:
- { label: "default", fsVrms: { left: 0.7071067811865475, right: 0.7071067811865475 } }
activeRange: "default"
bindings:
"SMSL USB AUDIO - Headphone Out": "SMSL USB AUDIO - Headphone Out"
perBackend:
WASAPI:
inputDeviceName: null
outputDeviceName: null
inputSampleRate: 384000
inputBitDepth: 24
outputSampleRate: 384000
outputBitDepth: 24
JAVASOUND:
inputDeviceName: AV200 - Xonar STX - Multichannel
outputDeviceName: SMSL USB AUDIO - Headphone Out
inputSampleRate: 96000
inputBitDepth: 32
outputSampleRate: 96000
outputBitDepth: 32
perBackend:
JAVASOUND:
inputDeviceName: null
outputDeviceName: null
inputSampleRate: 32000
inputBitDepth: 16
outputSampleRate: 384000
outputBitDepth: 32
WASAPI:
inputDeviceName: null
outputDeviceName: null
inputSampleRate: 384000
inputBitDepth: 24
outputSampleRate: 384000
outputBitDepth: 24
java --version
java 26.0.2 2026-07-21
Java(TM) SE Runtime Environment (build 26.0.2+10-55)
Java HotSpot(TM) 64-Bit Server VM (build 26.0.2+10-55, mixed mode, sharing)
Did you started generator? Has scope at least shows capture per second in the top right corner? Has FFT start to show data capturing - top right corner percentage?However - neither the scope or the FFT read anything - they just remain blank.
Hmm, strenghIf I restart the app, there are no audio devices to choose from - they are all just blank and cannot be edited. Starting the oscillator results in an error messages advising mt to choose a suitable audio device.
If I exit the app, delete ~/.config/Phonalyser and restart - I an then able to select devices again, but the scope and fft still don't work.
devices.yaml contains only device configuration like available ranges and calibration values independent of which backend is used. Record for devices apears here obly after you create empty config for new device:When I look in devices.yaml - I only see the SMSL device.
That's because during testing the input device disappears...I don't see differences in devices.yaml. And you show only output device
What is really strength, that scope has worked and FFT not. They uses same ring buffer. And if one works - should also work another module.
Duration doesn't mater. It is used only to save generated signal to audio file.I definitely started the generator - I set the duration to 600s so plenty of time for things to "warm up" (as so to speak).
That is really strength. In FFT you use left channel. It look like there is absolutely no signal - only zeros. Only in this case there will be no FFT trace because "signal" will be much below -300dB. But we see parallel working scope and in scope measurement table value changed, this means that scope gets real signal.When the scope does work, enable the FFT and it begins counting the averages etc. but simply never displays anything.
So, bugfix release 1.2.1 is public https://github.com/dgo42/Phonalyser/releases/tag/v1.2.1
New:
- Digital loopback backend (desktop + web): playback feeds capture with nothing
but arithmetic in between, dithered at the last bit - a bench with a known
noise floor, no hardware needed.
- QA40x sharing: the analyzer is released the moment nothing measures with it,
so the vendor software or another Phonalyser can take it without restarts.
Factory calibration is read once per serial and cached; a fresh card defaults
to the protected ranges (+42 dBV in / -12 dBV out).
- One universal server jar for all platforms and architectures; downloads stay
per-platform ZIPs (natives, launcher, service scripts).
- THD/IMD table levels readable in any unit, standalone device scanner, FAQ
chapter in the help, real device names on Linux.
Fixed, among others:
- The largest FFT lengths (4M and up at low rates) never produced a spectrum -
the frame is now gathered across reads instead of demanding 87 s from a 22 s
buffer in one piece.
- WASAPI-exclusive: 24/32-bit-only devices refused, 24-in-32 containers not
offered at 24, unstable default formats.
- Wide input ranges blocked the scope's calibrate button; closing the sweep
progress window did not stop the sweep; snap-to-bin used the wrong clock with
unequal rates.
- Web app: a sample-rate change now reaches a QA40x with the generator running,
restarts really start from zero, an overrun keeps the running average, and
the browser can start the generator from a deployed build.
Note: net protocol is v2 - update server and clients together. QA40x over
WebUSB works in Chrome, Chromium and Brave; Edge and Opera are Web Audio only.
outputSampleRate: 44100outputBitDepth: 32Device format probe started: AudioPCI [plughw:0,0] (input) Device format probe finished: AudioPCI [plughw:0,0] (input) - 14 format(s) in 2171 msDevice format probe started: CB5 [plughw:1,1] (input) Device format probe finished: CB5 [plughw:1,1] (input) - 8 format(s) in 54 ms Device format probe started: AudioPCI [plughw:0,0] (output) Device format probe finished: AudioPCI [plughw:0,0] (output) - 8 format(s) in 74 ms Device format probe started: AudioPCI [plughw:0,1] (output) Device format probe finished: AudioPCI [plughw:0,1] (output) - 8 format(s) in 1017 msDevice format probe started: CB5 [plughw:1,1] (output) Device format probe finished: CB5 [plughw:1,1] (output) - 18 format(s) in 40 ms Make sence, will try it soon tooAs of the device enumeration in linux java - the stock JVM alsa javasound connector enumerates only hw (card) devices. Also it prepends the plug plugin (hard-coded in the connector source code). PCM devices (those created by alsa configuration) are not enumerated at all. That's the reason for creating https://github.com/pavhofman/csjsound-alsapcm/ , initially for REW to solve the same issue.
I do not think we hit any issue in javasound with linked in/out devices in REW (a similar app). The access to each direction should be independent. If capture and playback run in separate threads (which they should), they can each access/work with different devices (i.e. those that run asynchronously). Of course reading/writing to different devices in the same thread would cause buffer issues and lock ups, unless specifically taking care of the devices asynchronous timing.
Hmmm, have you tried other backend: WDM-KS or JavaSound?