Audio-gd VIA DirectKS ASIO USB32 Driver

Core Machine (Operating system/System info/Roon build number)

Core Machine is HP N54L 16GB Ram / Operating System is Linux Debian Buster (4.19.0-9-amd64) / Roon Version 1.7 (build 537) stable

Remote Machine is Windows 10 PC 64 bit 32GB Ram / Roon Version 1.7 (build 537) stable (64bit)

Network Details (Including networking gear model/manufacturer and if on WiFi/Ethernet)

HP N54L machine is connected to a HP J9560A switch. Windows machine and HP J9560A are connected to a Synology RT 2600ac (AP mode only).

Router is Untangle Intel based machine connected to Synology 2600 AP

All connected via ethernet cable.

Audio Devices (Specify what device you’re using and its connection type - USB/HDMI/etc.)

Audio-gd nfb-28 (dac, pre-amp headphone amplifier) are connected to uptone audio iso regen to remote Windows 10 PC (office)

USB to spdif converter (connected to core machine HP N54L) and then to Sony AV receiver (family room)

Description Of Issue

When playing PCM files of more than 16 bits, the Signal Path shows a Bit Depth Conversion to 16bit. The driver is VIA DirectKS ASIO and is found here:
http://www.audio-gd.com/Pro/dac/USB32/USB32EN.htm

The reason I prefer the VIA DirectKS ASIO driver is that I can play DSD natively. I can confirm this by the soft click of the NFB-28 when changing to a DSD file.

When playing PCM files with more than 16 bits with the WASAPI driver the bit conversion does not occur.


I have also tested a core on my Windows 10 machine and the outcome is the same. Have tried uninstalling and reinstalling the USB32 driver on the windows machine to no avail.

Any assistance would be appreciated.

cheers,

Guy

Hello @HuMaBits,

After doing a search for this issue, it seems that others have also reported issues with 16-bit playback with the Audio-GD driver, even outside of Roon, see:

I would suggest you look over the thread for any workarounds you can implement or reach out to the Audio-GD manufacturer for further assistance, as this is very likely an issue with the driver itself.

1 Like

Hello @noris,

Thankyou very much for the reply and pointing out similar issues outside Roon.

I have had a look through these threads though haven’t found a workaround as yet. I have sent a query through to Audio-gd.

Earlier feedback from Audio-gd is that the nfb-28 doesn’t need flashing or cant be flashed so I think the issue one way or another is the ASIO driver as I understand it.

I am wondering if it something to do with the way the audio files are processed as the processing speed is around 71x which would seem quite high to reduce the bit depth from 24 to 16 though keep the sampling rate ? See below

I’ll add any further information to the thread as I keep searching.

cheers,

Guy

1 Like

Hi @HuMaBits,

A processing speed of 71x is actually a good thing.

You don’t want to have the processing speed drop under 1.2x or so, as that would mean that the hardware can’t keep up with the DSP/playback operations.

You can see our DSP guide for more info regarding processing speed.

Do let us know how reaching out to Audio-gd goes!

1 Like

I think this is your best bet. ASIO drivers usually come with a control panel that lets you set bit depth. If they don’t, then chances are that value is hard set. Which seems to be what the article that Noris linked above says.

Hello @noris and @Rugby,

Thankyou for your replies and confirmation on the processing speed.

I have contacted the manufacturer and the following details may be useful to assist troubleshooting this issue.

The USB audio controller is confirmed as being the VIA Envy VT1731

The ASIO driver is set to 32 bits. There is no option in the control panel to set the bit depth.

I have used foobar and it seems to play bitperfect with the ASIO driver, however I dont have the knowledge to know if it is actually playing bit perfect audio.

I have downloaded some files from http://www.rme-audio.de/download/bit_test_wavs.zip to “check” clicks play at same timing though as before hard to know if bit perfect audio is being played.

I couldnt get foobar to play the dsf files though - probably my ineptness at running foobar with the various plugins etc. Actually one of the reasons I purchased Roon!

Also tested the USB interface with a friends macbook and it could play all specified audio formats. So I would gather this confirms there is an issue with the driver or the implementation/use of the driver?

Happy to do some further testing etc to assist resolving the issue. Any guidance appreciated.

cheers,

Guy

If Mac works, try Linux. Perhaps connect your Audio-gd to a USB port of the N54L running Linux.

Hello @wklie,

Trust you are well and thankyou for the advice. Hooked it directly to the N54L and it works for PCM audio as follows:

lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 002: ID 0463:ffff MGE UPS Systems UPS
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 040d:3410 VIA Technologies, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

aplay -l
**** List of PLAYBACK Hardware Devices ****
card 1: Audiogd [Audio-gd], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0

cat /proc/asound/Audiogd/stream0
Audio-gd Audio-gd at usb-0000:00:12.2-5, high speed : USB Audio

Playback:
Status: Stop
Interface 1
Altset 1
Format: S16_LE
Channels: 2
Endpoint: 4 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 500 us
Interface 1
Altset 2
Format: S24_3LE
Channels: 2
Endpoint: 4 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 250 us
Interface 1
Altset 3
Format: S32_LE
Channels: 2
Endpoint: 4 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 250 us

When playing *.dsf file I am getting no sound though the parameters are as follows:cat /proc/asound/Audiogd/stream0
Audio-gd Audio-gd at usb-0000:00:12.2-5, high speed : USB Audio

Playback:
Status: Running
Interface = 1
Altset = 3
Packet Size = 776
Momentary freq = 352722 Hz (0x2c.1717)
Feedback Format = 16.16
Interface 1
Altset 1
Format: S16_LE
Channels: 2
Endpoint: 4 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 500 us
Interface 1
Altset 2
Format: S24_3LE
Channels: 2
Endpoint: 4 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 250 us
Interface 1
Altset 3
Format: S32_LE
Channels: 2
Endpoint: 4 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 250 us

I am running vanilla Debian so what I will do is work through the faqs and forums etc to see if I can play *dsf files via this setup. @noris and @Rugby may have some specific feedback.

Hopefully I will be able to sort out linux playback as well - I understand earlier versions of the linux kernal didnt support playback of dsf files.

If you have any other advice that would be appreciated. Thankyou again.

cheers,

Guy

If Mac plays DSD as well, I expect Linux to work.

Make sure your DSD Playback Strategy is set to DoP in Roon device setup.

1 Like

Hello @wklie,

Thankyou for the guidance.

I’ll work on this over the coming week or so and keep this post going as I am sure there will be others that may be dealing with this issue.

The additional benefit is I’ll also get to know linux a lot better :smiley:

cheers,

Guy

Hello @wklie, @noris, @Rugby

I’ve outlined the summary below so we can keep track of whats working and whats not:

Windows
WASAPI
Working Bit perfect for PCM audio files for 16, 24 and 32 bit. Rates of 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000.
No audio output of DSD files (DSD over PCM v1.0 (DoP)).

ASIO USB32 Driver (at this stage - legacy chipset and not supported by VIA)
Working ASIO (VIA DirectKS ASIO) : Bit perfect for PCM audio files for 16 bit.
Working DSD files supported for DSD Sample rates of 64 and 128 (Native).
PCM files with 24 and 32 bits changed to 16 bit files. Sample rates maintained. Behaviour is the same for upsampled pcm files.

MAC
Working : Bit perfect for PCM audio files for 16, 24 and 32 bit. Rates of 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000.
Working : DSD files supported for DSD Sample rates of 64 and 128 (DSD over PCM v1.0 (DoP)).

Linux HP N54L Linux debianroon 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2 (2020-04-29) x86_64 GNU/Linux (at this stage)
Working : Bit perfect for PCM audio files for 16, 24 and 32 bit. Rates of 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000.
No audio output of DSD files supported with current setup (DSD over PCM v1.0 (DoP)).

As mentioned above I will tinker with Debian linux to see if I can play dsd files over the next couple of weeks.

cheers,

Guy

1 Like

Hello @wklie, @noris, @Rugby,

Thankyou for your assistance.

Confirmed I can play DSD/DSF file via linux though directly via aplay. Probably better to say that I confirmed my ability to play DSD/DSF via linux :wink: - thankyou for the guidance @wklie !

Methodology outlined below.

Used Foobar2000 to encapsulate DSF file via wav wrapper. I have used the following methodology:

https://www.stereo.net.au/forums/topic/60349-howto-play-dsd-via-logitechmediaserver-using-squeezebox-touch-or-wandboard/

Link to the plugin is here:
https://docs.google.com/file/d/0B4jZ4NDGECzEczBjYVByNUdjdDg/edit?pli=1

Saved via *.wav wrapper rather than flac as couldn’t get the Foobar2000 plugin to wrap dsd file in flac (needed to open a “Command-line Encoder” which I wasn’t sure on how to address and wanted to only go down one rabbit hole… :see_no_evil:).

Audio test file is from 2L http://www.2l.no/hires/index.html? Hoff: Innocence Hoff Ensemble ( Stereo DSD 128 5.6448Mbit/s)

I stopped roonserver before doing the testing.

Linux command to play file is as follows:

**aplay -D plughw:CARD=Audiogd,DEV=0 -vv Innocence.wav**
Playing WAVE 'Innocence.wav' : Signed 24 bit Little Endian in 3bytes, Rate 352800 Hz, Stereo
Plug PCM: Hardware PCM card 1 'Audio-gd' device 0 subdevice 0
Its setup is:
  stream       : PLAYBACK
  access       : RW_INTERLEAVED
  format       : S24_3LE
  subformat    : STD
  channels     : 2
  rate         : 352800
  exact rate   : 352800 (352800/1)
  msbits       : 24
  buffer_size  : 174762
  period_size  : 43691
  period_time  : 123840
  tstamp_mode  : NONE
  tstamp_type  : MONOTONIC
  period_step  : 1
  avail_min    : 43691
  period_event : 0
  start_threshold  : 174762
  stop_threshold   : 174762
  silence_threshold: 0
  silence_size : 0
  boundary     : 6148891234988457984
  appl_ptr     : 0
  hw_ptr       : 0
###+                                               | 04%

Used plughw to make sure Which I think makes sense given that DSD 128 becomes a 352.8 kHz PCM signal.

Used plughw and as check used hw as follows:

aplay -D hw:CARD=Audiogd,DEV=0 -f S24_LE -c2 -r352800 -vv Innocence.wav

Though this came with the following warning immediately at the start of playing the file

Warning: format is changed to S24_3LE
Playing WAVE 'Innocence.wav' : Signed 24 bit Little Endian in 3bytes, Rate 352800 Hz, Stereo
Hardware PCM card 1 'Audio-gd' device 0 subdevice 0

The verbose output is the same for both methods.

For both methods I can verify that it is DSD playing through the DAC via the soft click (presumably the relay inside the dac) and the relatively loud pop through the speakers when the file has completed playing.

I have also tried playing the encapsulated file - probably doesn’t make sense but did it anyhow - via Roon and no luck.

As above when dsf file is being played directly via Roon, it shows as playing on the GUI and the information is as follows, though no sound:

**cat /proc/asound/Audiogd/stream0**
Audio-gd Audio-gd at usb-0000:00:12.2-5, high speed : USB Audio

Playback:
  Status: Running
    Interface = 1
    Altset = 1
    Packet Size = 136
    Momentary freq = 44110 Hz (0x5.8383)
    Feedback Format = 16.16
  Interface 1
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 4 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 500 us
  Interface 1
    Altset 2
    Format: S24_3LE
    Channels: 2
    Endpoint: 4 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 250 us
  Interface 1
    Altset 3
    Format: S32_LE
    Channels: 2
    Endpoint: 4 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 250 us

So I am gathering its probably an audio setting in Roon or the encapsulation process in Roon ?

Any further guidance as not sure what to do now ?

cheers,

Guy

Please post a screenshot of the Signal path when you’re playing DSF with the DAC directly connected to Roon Core on Linux.

This does not look right. It should be 352800 for DSD128 DoP or 176400 for DSD64 DoP.

1 Like

Hello @wklie, @noris and @Rugby,

Thankyou for the good pickup @wklie I pasted the incorrect data above - iapologies for the error, certainly not helpful when trying to troubleshoot.

The output when playing DSD over PCM (DoP) is as follows:

cat /proc/asound/Audiogd/stream0

Audio-gd Audio-gd at usb-0000:00:12.2-5, high speed : USB Audio

Playback:
  Status: Running
    Interface = 1
    Altset = 3
    Packet Size = 776
    Momentary freq = 352722 Hz (0x2c.1717)
    Feedback Format = 16.16
  Interface 1
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 4 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 500 us
  Interface 1
    Altset 2
    Format: S24_3LE
    Channels: 2
    Endpoint: 4 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 250 us
  Interface 1
    Altset 3
    Format: S32_LE
    Channels: 2
    Endpoint: 4 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 250 us

Settings below:

Signal path below:

cheers,

Guy

Hello @wklie, @noris and @Rugby,

Thankyou for your assistance thus far.

I also checked the differences using cat /proc/asound/Audiogd/stream0 when playing the DSD file via Roon (DoP) and also playing via aplay (in wav wrapper):

a) Roon (as noted above)

Playback:
Status: Running
Interface = 1
Altset = 3
Packet Size = 776
Momentary freq = 352722 Hz (0x2c.1717)
Feedback Format = 16.16

and no audio through the speakers

b) via the CLI using aplay and *.wav wrapper (aplay -D hw:CARD=Audiogd,DEV=0 Innocence.wav) using the following

Playback:
Status: Running
Interface = 1
Altset = 2
Packet Size = 582
Momentary freq = 352722 Hz (0x2c.1717)
Feedback Format = 16.16

and I get audio through the speaks

Furthermore if I try to force aplay to use 32 bit (aplay -D hw:CARD=Audiogd,DEV=0 -f S32_LE -c2 Innocence.wav) the following alert appears:

Warning: format is changed to S24_3LE
Playing WAVE ‘Innocence.wav’ : Signed 24 bit Little Endian in 3bytes, Rate 352800 Hz, Stereo

Which is confirmed via the following:

cat /proc/asound/Audiogd/stream0

Audio-gd Audio-gd at usb-0000:00:12.2-5, high speed : USB Audio

Playback:
  Status: Running
    Interface = 1
    Altset = 2
    Packet Size = 582
    Momentary freq = 352722 Hz (0x2c.1717)
    Feedback Format = 16.16
  Interface 1
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 4 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 500 us
  Interface 1
    Altset 2
    Format: S24_3LE
    Channels: 2
    Endpoint: 4 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 250 us
  Interface 1
    Altset 3
    Format: S32_LE
    Channels: 2
    Endpoint: 4 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 250 us

However this could be just a distraction as it may be related to the *.wav wrapper - used Foobar2000 to do *wav wrapping. I dont know how to force Roon to play the DSD file through Interface 1 Altset 2.

Anyhow still unable to hear DSD file via DoP using Roon with the N54L server using Debian Linux

Any thoughts appreciated on what other tests/checks I could undertake.

cheers,

Guy

In Roon, set Max Bits Per Sample to 24 instead of 32.

It looks like the 32-bit altset interface in Linux is broken for DoP, and the Windows drivers are also broken (for different setups).

Hello @wklie,

Thankyou for the suggestions. I’ll run through these tests over next week or so and report back.

I’ll also see what I can do via the CLI on my friends Mac laptop as well as the Mac seemed to run everything no problem at all.

Thankyou again for your support. Most appreciated.

cheers,

Guy

Any update on DoP playback after setting Max Bits Per Sample to 24?

Hello wklie,

Apologies no progress as yet - i have been side-tracked. Will be onto it shortly. Had an issue with the roonserver and re-building it.

cheers,

Guy