Volumio won't play DSD native

Hello experts,

I have a Yamaha A-S801, DSD native capable DAC that can go up to DSD512.

I recently got the Raspberry Pi 3 b, that I flashed with the latest Volumio image (2.348).

I’ve copied DSD512 .dsf files locally to the SD Card and discovered it, in the library. This is the playback configuration:

Output: Yamaha USB DAC
I2S DAC: Off
Reading mode: DSD Direct
DSD Volume: Off
Volume normalisation: Off

When I playback, on the playback page, it reads 11.28 Mhz, 1 bit, and the LED on the A-S801 reads PCM x8.

I know that the A-S801 reads native DSD, as I achieve this with Foobar, on my laptop.

Is this a problem with mpd? Alsa?

Thanks!!
Rikkzazz

By the way, ALSA version is 1.0.28-1

Nobody?

To properly play DSD files in DSD direct mode, there are 3 things needed:

  • Proper version of alsa (Volumio has it)
  • Proper mpd version (Volumio has it)
  • DAC needs to be direct DSD compatible & its vendor and product ID should be added to the kernel to signal alsa that this device can play DSD files natively.

The third requirement is where your DAC fails. And to be clear, this is because direct DSD in alsa & linux in general requires EVERY SPECIFIC DAC to be added to a list to signal its compatibility to DSD, which IMHO makes no sense, but this is it for now. I really hope that we will find a better way to detect whether a DAC is compatible with DSD or not.

I’ve started last month a study on a custom, audio-tailored, kernel for the raspberry PI, and among the patches and mods, I’ve inserted also the one for USB quirks. See:
github.com/volumio/custom-kerne … irks.patch

So, when we will release this, we could at least add more DACs to this file and make them Direct DSD compatible. If you want yours to be listed here, please provide vendor and product id. You can see all USB IDs by typing:

lsusb

Hope this explains the current situation

Hi michelangelo,
Topping D30 (XMOS) : 20b1:3066

Tapatalkkal küldve az én PLK-L01 eszközömről

Hello!
Please add to the list Pioneer A50DA . ID 08e4 : 01bd Pioneer Corp.

Just a comment based on what I’ve learned regarding native dsd so far:

The usb id is not enough, as you also need to know the altset of each receiver in order to properly add it in quirks code of linux kernel. The command below will give the apporpriate info (altset 2 or 3):

cat /proc/asound/card*/stream0

github.com/torvalds/linux/blob/ … b/quirks.c

Regards,

Michael

Hi,

What if there are 3 altsests, like this :

Interface 1
Altset 1
Format: S32_LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 125 us
Interface 1
Altset 2
Format: S16_LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 125 us
Interface 1
Altset 3
Format: SPECIAL
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 125 us

If I understand correctly your dac will support native dsd in altset 3.

Sent from my Redmi Note 3 using Tapatalk

ThanX tux -:slight_smile:

I will try to modify and compile odroid c2 kernel, based on previous conversation …
I hope I can drive my dac with dsd data from volumio … currently dop is ok …

Tapatalkkal küldve az én PLK-L01 eszközömről

Hello!

volumio@volumio:~$ cat /proc/asound/card*/stream0
Onkyo & Pioneer Corporation PIONEER A-70DA A-50DA USB AUDIO at usb-3f980000.usb
: USB Audio

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

Thanks Michelangelo,

Sorry for the late response, was busy with a new job for 2018. :smiley:

The result of the lsusb command:

root@volumio:~# lsusb
Bus 001 Device 005: ID 0499:3111 Yamaha Corp.
root@volumio:~#

The result of the cat /proc/asound/card*/stream0 command:

root@volumio:~# cat /proc/asound/card*/stream0
Yamaha Corporation Yamaha USB DAC at usb-3f980000.usb-1.5, high speed : USB Audio

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

Capture:
Status: Stop
Interface 2
Altset 1
Format: S32_LE
Channels: 2
Endpoint: 3 IN (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 125 us
root@volumio:~#

I hope you can add my DAC to the list.

Thanks!!!
Richard

Would you please also add, Terra Berry DAC2+ on the list?

Terra Berry also has the ability to play DSD native instead of DoP.

Many thanks.

Edit: This device clearly does not support native DSD playback, sorry.

Hello Michelangelo,

volumio@volumio:~$ lsusb Bus 001 Device 006: ID 08e4:01a3 Pioneer Corp.

[code]volumio@volumio:~$ cat /proc/asound/card*/stream0
PIONEER HOME ELECTRONICS Pioneer N-70A N-50A USB Audio at usb-20980000.usb-1.2, : USB Audio

Playback:
Status: Stop
Interface 1
Altset 1
Format: S16_LE
Channels: 2
Endpoint: 7 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 125 us
Interface 1
Altset 2
Format: S24_3LE
Channels: 2
Endpoint: 7 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 125 us
Interface 1
Altset 3
Format: S32_LE
Channels: 2
Endpoint: 7 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 125 us
[/code]

Thanks!

Hi Michelangelo

Please add. tks!

volumio@volumio:~$ lsusb

Bus 001 Device 004: ID 16d0:eca1 MCS

volumio@volumio:~$ cat /proc/asound/card*/stream0
PureAudio Lotus DAC5 at usb-3f980000.usb-1.2, high speed : USB Audio

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

Hi,

To be more complete about Denon PMA-2500NE

volumio@volumio:~$ lsusb
Bus 004 Device 003: ID 154e:1007 D&M Holdings, Inc. (Denon/Marantz)

volumio@volumio:~$ cat /proc/asound/card*/stream0
D&M Holdings Inc. PMA-2500NE at usb-aotg_hcd.1-1.1, high speed : USB Audio

Playback:
Status: Running
Interface = 1
Altset = 1
Packet Size = 441
Momentary freq = 352787 Hz (0x2c.1930)
Feedback Format = 16.16
Interface 1
Altset 1
Format: S32_LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000, 705600, 768000
Data packet interval: 125 us
Interface 1
Altset 2
Format: S32_LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000, 705600, 768000
Data packet interval: 125 us
Interface 1
Altset 3
Format: SPECIAL
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000, 705600, 768000
Data packet interval: 125 us

Thanks !

Hi,

did you ever test this? I’m asking because I need to recompile the C2 kernel for another issue (pops at playback start).
While I’m at it, I could add your change too and build an official image (see the Community Portings page for Odroid).

I have reported the same problem a while ago. I am of course interested by the fix.

This is the result of the command:

Yamaha Corporation Yamaha CD Player at usb-3f980000.usb-1.4, high speed : USB Audio

Playback:
  Status: Stop
  Interface 1
    Altset 1
    Format: S24_3LE
    Channels: 4
    Endpoint: 7 OUT (ASYNC)
    Rates: 44100, 48000
    Data packet interval: 125 us
  Interface 1
    Altset 2
    Format: S24_3LE
    Channels: 4
    Endpoint: 7 OUT (ASYNC)
    Rates: 88200, 96000
    Data packet interval: 125 us
  Interface 1
    Altset 3
    Format: S24_3LE
    Channels: 4
    Endpoint: 7 OUT (ASYNC)
    Rates: 176400, 192000
    Data packet interval: 125 us

Capture:
  Status: Stop
  Interface 2
    Altset 1
    Format: S24_3LE
    Channels: 4
    Endpoint: 6 IN (ASYNC)
    Rates: 44100, 48000
    Data packet interval: 125 us
  Interface 2
    Altset 2
    Format: S24_3LE
    Channels: 4
    Endpoint: 6 IN (ASYNC)
    Rates: 88200, 96000
    Data packet interval: 125 us
  Interface 2
    Altset 3
    Format: S24_3LE
    Channels: 4
    Endpoint: 6 IN (ASYNC)
    Rates: 176400, 192000
    Data packet interval: 125 us

Dominique

Hi gkkpch,

answer for your question about “patching” quirks.c :

Yes I did, but no changes, Direct DSD does not produce any sound, DOP is still OK.

Here is the part of quirks.c :

[code]/* XMOS based USB DACs /
switch (chip->usb_id) {
case USB_ID(0x20b1, 0x3008): /
iFi Audio micro/nano iDSD /
case USB_ID(0x20b1, 0x2008): /
Matrix Audio X-Sabre /
case USB_ID(0x20b1, 0x300a): /
Matrix Audio Mini-i Pro /
case USB_ID(0x22d9, 0x0416): /
OPPO HA-1 */
if (fp->altsetting == 2)
return SNDRV_PCM_FMTBIT_DSD_U32_BE;
break;

case USB_ID(0x20b1, 0x000a): /* Gustard DAC-X20U */
case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */
case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */
case USB_ID(0x20b1, 0x3023): /* Aune X1S 32BIT/384 DSD DAC */
case USB_ID(0x20b1, 0x3066): /* TOPPING D30 32BIT/192 DSD128 DAC */
case USB_ID(0x2616, 0x0106): /* PS Audio NuWave DAC */
	if (fp->altsetting == 3)
		return SNDRV_PCM_FMTBIT_DSD_U32_BE;
	break;
default:
	break;                                           

[/code]

Kernel compilation went fine, just a few warnings.
New Image and meson64_odroidc2.dtb replaced old ones in boot folder ( via ssh)

Maybe i forget something ? Is it a way to check kernel, that this USB_ID is implemented … or my compilation use old object file ?
Any idea ?

Hi, my denafrips pontus dac also cannot play DSD direct even the I2S list cannot find the driver!