Thank you for your donation!


Cloudsmith graciously provides open-source package management and distribution for our project.


Solved: Native DSD not working. USBridge with Soekris DAM1021 and Amanero
#1
Hello,

Need some help here. I just received by USBridge Sig. Configured Moode and I was able to play music but output to the Soekris DAM1021 with a Amanero USB card is always going as DOP. Below are some outputs from the OS which you should need.

alsa-capabilities
4: `USB Audio' Digital USB Audio Class audio output on device Combo384 Amanero
    -hardware address:               hw:1,0  (or hw:Amanero,0)
    -device label:                   Combo384 Amanero
    -formats:                        (n/a)
    -usb audio class:                UAC2 (isochronous asynchronous)
    -streamfile:                     /proc/asound/card1/stream0
    -character device:               /dev/snd/pcmC1D0p
    -monitor file:                   /proc/asound/card1/pcm0p/sub0/hw_params

cat /proc/asound/card1/pcm0p/sub0/hw_params
access: RW_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 176400 (176400/1)
period_size: 22050
buffer_size: 88200

cat /proc/asound/card1/id
Amanero
Reply
#2
MPD and ALSA probe the audio device and automatically determine whether "native DSD" can be used.
https://www.musicpd.org/doc/html/user.ht...igital-dsd

If you are confident that MPD should be using native DSD instead of DoP then I'd suggest posting an issue in MPD Git repo. Include the output of mpd -V command, the output from the cmds in your post and the version of ALSA being used. This can be obtained via sudo /var/www/comand/sysinfo.sh
https://github.com/MusicPlayerDaemon/MPD/issues
Enjoy the Music!
moodeaudio.org | Mastodon Feed | GitHub
Reply
#3
@boring

So Tim said

Quote:If you are confident that MPD should be using native DSD instead of DoP


Since you apparently just started using the USBridge Sig, had you previously used the Amanero/Soekris combination with moOde on an RPi? Were you able to play native DSD on that setup? Or with the Amanero/Soekris combo connected to some other computer?

If so, I would think there is also a possibility your problem arises in the USBridge USB subsystem, possibly in the driver. This would then be a question for Allo support rather than the MPD maintainer.

I have none of the hardware involved. On one system, I do have a Khadas Tone board (USB DAC) plugging into an RPi4B running moOde 6.4.0. According to moOde's Audio info panel, it's outputting native DSD to the KTB.

Quote:Audio Information

INPUT / OUTPUT
     Source: NAS/OMV-SMB/DSD/NDSD012/03_Welcome-to-NativeDSD-Sampler_NativeDSD-     Presents_NDSD012_2ch64.dsf
     Encoded at: DSD64, 1 bit, 5.644 Mbps Stereo
     Decoded to: DSD bitstream, 5.645 Mbps
     Destination: Local
     Output rate: DSD bitstream bit, 88.2 kHz, Stereo, 5.645 Mbps

and

Code:
pi@moodeLR:/var/lib/mpd/playlists $ cat /proc/asound/card1/pcm0p/sub0/hw_params
access: RW_INTERLEAVED
format: DSD_U32_BE
subformat: STD
channels: 2
rate: 88200 (88200/1)
period_size: 11025
buffer_size: 44100


Regards,
Kent
Reply
#4
An addendum.

I got to wondering how Linux determines if a USB DAC is DSD-capable. It's not something obvious in the USB enumeration of the interface.

Apparently it's done based on recognizing the specific device. Here's a snippet from the kernel-source code for sound/usb/quirks.c. (NOTE the intro comment "all hardware that is known to support this format has to be listed here")

Code:
/*

 * snd_usb_interface_dsd_format_quirks() is called from format.c to

 * augment the PCM format bit-field for DSD types. The UAC standards

 * don't have a designated bit field to denote DSD-capable interfaces,

 * hence all hardware that is known to support this format has to be

 * listed here.

 */

u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,

                    struct audioformat *fp,

                    unsigned int sample_bytes)

{

    struct usb_interface *iface;



    /* Playback Designs */

    if (USB_ID_VENDOR(chip->usb_id) == 0x23ba &&

        USB_ID_PRODUCT(chip->usb_id) < 0x0110) {

        switch (fp->altsetting) {

        case 1:

            fp->dsd_dop = true;

            return SNDRV_PCM_FMTBIT_DSD_U16_LE;

        case 2:

            fp->dsd_bitrev = true;

            return SNDRV_PCM_FMTBIT_DSD_U8;

        case 3:

            fp->dsd_bitrev = true;

            return SNDRV_PCM_FMTBIT_DSD_U16_LE;

        }

    }



    /* XMOS based USB DACs */

    switch (chip->usb_id) {

    case USB_ID(0x1511, 0x0037): /* AURALiC VEGA */

    case USB_ID(0x2522, 0x0012): /* LH Labs VI DAC Infinity */

    case USB_ID(0x2772, 0x0230): /* Pro-Ject Pre Box S2 Digital */

        if (fp->altsetting == 2)

            return SNDRV_PCM_FMTBIT_DSD_U32_BE;

        break;



    case USB_ID(0x0d8c, 0x0316): /* Hegel HD12 DSD */

    case USB_ID(0x10cb, 0x0103): /* The Bit Opus #3; with fp->dsd_raw */

    case USB_ID(0x16b0, 0x06b2): /* NuPrime DAC-10 */

    case USB_ID(0x16d0, 0x09dd): /* Encore mDSD */

    case USB_ID(0x16d0, 0x0733): /* Furutech ADL Stratos */

    case USB_ID(0x16d0, 0x09db): /* NuPrime Audio DAC-9 */

    case USB_ID(0x1db5, 0x0003): /* Bryston BDA3 */

    case USB_ID(0x22e1, 0xca01): /* HDTA Serenade DSD */

    case USB_ID(0x249c, 0x9326): /* M2Tech Young MkIII */

    case USB_ID(0x2616, 0x0106): /* PS Audio NuWave DAC */

    case USB_ID(0x2622, 0x0041): /* Audiolab M-DAC+ */

    case USB_ID(0x27f7, 0x3002): /* W4S DAC-2v2SE */

    case USB_ID(0x29a2, 0x0086): /* Mutec MC3+ USB */

    case USB_ID(0x6b42, 0x0042): /* MSB Technology */

        if (fp->altsetting == 3)

            return SNDRV_PCM_FMTBIT_DSD_U32_BE;

        break;



    /* Amanero Combo384 USB based DACs with native DSD support */

    case USB_ID(0x16d0, 0x071a):  /* Amanero - Combo384 */

    case USB_ID(0x2ab6, 0x0004):  /* T+A DAC8DSD-V2.0, MP1000E-V2.0, MP2000R-V2.0, MP2500R-V2.0, MP3100HV-V2.0 */

    case USB_ID(0x2ab6, 0x0005):  /* T+A USB HD Audio 1 */

    case USB_ID(0x2ab6, 0x0006):  /* T+A USB HD Audio 2 */

        if (fp->altsetting == 2) {

            switch (le16_to_cpu(chip->dev->descriptor.bcdDevice)) {

            case 0x199:

                return SNDRV_PCM_FMTBIT_DSD_U32_LE;

            case 0x19b:

            case 0x203:

                return SNDRV_PCM_FMTBIT_DSD_U32_BE;

            default:

                break;

            }

        }

        break;

    case USB_ID(0x16d0, 0x0a23):

        if (fp->altsetting == 2)

            return SNDRV_PCM_FMTBIT_DSD_U32_BE;

        break;



    default:

        break;

    }



    /* ITF-USB DSD based DACs */

    if (is_itf_usb_dsd_dac(chip->usb_id)) {

        iface = usb_ifnum_to_if(chip->dev, fp->iface);



        /* Altsetting 2 support native DSD if the num of altsets is

        * three (0-2),

        * Altsetting 3 support native DSD if the num of altsets is

        * four (0-3).

        */

        if (fp->altsetting == iface->num_altsetting - 1)

            return SNDRV_PCM_FMTBIT_DSD_U32_BE;

    }



    /* Mostly generic method to detect many DSD-capable implementations -

    * from XMOS/Thesycon

    */

    switch (USB_ID_VENDOR(chip->usb_id)) {

    case 0x152a:  /* Thesycon devices */

    case 0x20b1:  /* XMOS based devices */

    case 0x22d9:  /* Oppo */

    case 0x23ba:  /* Playback Designs */

    case 0x25ce:  /* Mytek devices */

    case 0x278b:  /* Rotel? */

    case 0x292b:  /* Gustard/Ess based devices */

    case 0x2ab6:  /* T+A devices */

    case 0x3842:  /* EVGA */

    case 0xc502:  /* HiBy devices */

        if (fp->dsd_raw)

            return SNDRV_PCM_FMTBIT_DSD_U32_BE;

        break;

    default:

        break;



    }



    return 0;
}


My Khadas Tone Board enumerates as USB vendor 20b1 (e.g., 0x20b1) which, by the last switch statement, is identified to the kernel (thence to ALSA) as DSD-capable.


Regards,
Kent
Reply
#5
Thanks everyone for the response. I will 1st contact Allo about this.

I was using a jRiver ID before the USBridge Sig and DSD native was playing fine.
Reply
#6
jRiver ID ??
Enjoy the Music!
moodeaudio.org | Mastodon Feed | GitHub
Reply
#7
Just tried using the USBridge Sig with a SMSL SU-8 DAC. Same issue, DSD files going to the DAC through DoP instead of DSD native.
Reply
#8
(01-03-2020, 02:24 AM)Tim Curtis Wrote: jRiver ID ??

That's a Intel NUC based jRiver ID with linux. That's not running Moode.
Reply
#9
(01-03-2020, 06:10 AM)boring Wrote: Just tried using the USBridge Sig with a SMSL SU-8 DAC. Same issue, DSD files going to the DAC through DoP instead of DSD native.

Correction. DSD native with the SMSL SU-8 DAC is working. Which means the Amanero USB board is the issue?
Reply
#10
If the iRiver ID is running Linux, it should be similar to moOde with respect to this detection issue.

Out of personal curiosity and following up on my addendum post, what is the Vendor ID reported for your Amanero/Soekris combo and for your SMSL? You can find it by invoking the lsusb command while the DAC is plugged into your USBridge or RPi or iRiver ID.

For example, on my system with hostname moodeLR (moOde 6.4.0/RPi4B/Khadas Tone Board):

Code:
pi@moodeLR:~ $ lsusb
Bus 002 Device 002: ID 152d:1561 JMicron Technology Corp. / JMicron USA Technology Corp. JMS561U two ports SATA 6Gb/s bridge
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 20b1:000a XMOS Ltd
Bus 001 Device 003: ID 2252:1037  
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


The "XMOS Ltd" entry is my KTB and the vendor ID is "20b1". (As an aside, it's curious the Khadas folks didn't bother to customize the 3rd party Thyscon XMOS driver with their own tradename.)

Regards,
Kent
Reply


Forum Jump: