I'm developing an ALSA based audio application; c and c++. The DSD source file under test is fs64 DSD format.
It plays well under ALSA using the native DSD frame packer. It plays well using the DSD to PCM decoder and frame packer.
It is not playing using DOP.
I'm reasonably confident I have ALSA set up correctly..... - The ALSA format is set to S32_LE, as supported by the DAC? - The ALSA sample rate set in for FS64 which should be 176k?
cat /proc/asound/DX1/pcm0p/sub0/hw_params
access: RW_INTERLEAVED format: S32_LE subformat: STD channels: 2 rate: 176400 (176400/1) period_size: 22050 buffer_size: 88200
The 32 bit frames written to snd_pcm_writei() are packed I think as per DOP specification, so the buffer looks like this:
MSB LSB 0x5 0xd3 0x2c 0x0 0x5 0xd3 0x2c 0x0 0xfa 0xd2 0xd2 0x0 0xfa 0xd2 0xd2 0x0 0x5 0xd2 0xd2 0x0 0x5 0xd2 0xd2 0x0
There are no overflow or ALSA play errors; however all I get is a high pitched note to start, and then noise. I'm stumped.
The DAC is a Topping DX1 which has an XMOS USB interface and an AK4493S chip. I've also tried my Accuphase DAC-60.
Documentation on this seems sparse.
- How can test if ALSA / Linux is putting the DAC into DOP mode? - How can I determine if the DAC or USB interface is supported by Debian (latest version) and controlling the DAC correctly?
Is there anything obvious I am missing here?
Thanks,