I am using a BB PCM5122 based DAC+ Pro HAT, which used to top out at 192kHz. The current Volumio 4 driver lets the DAC+ Pro play 384kHz and DSD512 (at DSD native). This is great, a big thank you to everyone involved (HifiBerry?, Volumio Team?).
There must be some kink in the cable.
According to the Hifiberry datasheet this is not possible.
https://www.hifiberry.com/docs/data-sheets/datasheet-dac-adc-pro/
The PCM5122 DAC chip can do 384 and DSD512. Hifiberry chose to limit the samplerate to PCM 192kHz and no DSD. Probably for a reason. I can hear some skipping at DSD512. Other manufacturers using the same chipset rate it at DSD128.
The HiFiBerry DAC+ Pro is built around the Burr-Brown PCM5122 DAC chip, which technically supports sample rates up to 384kHz at 32-bit resolution. So why the cap at 24-bit / 192kHz?
Here’s why the limitation exists:
- Design Choices: HiFiBerry intentionally limits the DAC+ Pro to 24/192 to ensure maximum compatibility with Raspberry Pi hardware and software. Higher sample rates can introduce instability or require more processing power, which isn’t ideal for a plug-and-play experience.
- I²S Interface Constraints: The DAC communicates with the Raspberry Pi via the I²S interface, which has bandwidth limitations. Going beyond 192kHz could push the limits of reliable data transmission.
- Software Support: Supporting higher rates might require custom kernel tweaks or specialized playback software.
Thanks, @Wheaten
When I put the hifiberry image on the RP, Roon reproduction is indeed limited to 192kHz, no DSD. However with Volumio, there does not seem to be a limit when I chose the Hifiberry DAC+ Pro. I can playback up to 384kHz / DSD512 (using DSD native). Should the Volumio driver not be consistent with the design choices Hifiberry made in their own OS image?
Any thoughts/info on this?
Correct Specifications for this DAC
Just ran a test:
- FLAC goes well till 384kHz/32bit
- DSD max DSD256
Three thoughts actually:
Apples-vs-apples:
The difference comes from driver-level configuration. Volumio uses the upstream snd-soc-hifiberry-dacplus driver, which by default exposes the full capabilities of the PCM5122 DAC chip, including 384kHz PCM and DSD native modes.
Pears-vs-apples:
HiFiBerry’s own image intentionally limits these capabilities via driver constraints or ALSA config to ensure broader compatibility and stability. Volumio does not impose these limits unless explicitly configured to match.
Design choices:
Unlike on HiFiBerry OS, HiFiBerry is just one of many supported audio hardware options in Volumio. Volumio is designed to serve a wide range of DACs and sound cards, and does not enforce artificial limits on PCM5122 chip unless required for system stability or compatibility. Why any other DAC based on the same chip should take any penalties?
The merit for this discussion escapes me.
Kind Regards,
What does this mean?
Hey @jacobacci,
It means Volumio will not impose the same sample rate or feature restrictions as HiFiBerry’s own OS unless you configure Volumio to do so (e.g. by crating a HiFiBerry-specific plugin or setting hardware limits yourself).
Kind Regards,
I have read up and I cannot find any reference that the PCM5122 chip is actually capable of playing DSD. The datasheet makes no mention at all.
Probing for capabilities with aplay results in:
aplay --dump-hw-params -D hw:0,0 -f cd /dev/zero
Playing raw data ‘/dev/zero’ : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
HW Params of device “hw:0,0”:
ACCESS: MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT: S16_LE S24_LE S32_LE
SUBFORMAT: STD
SAMPLE_BITS: [16 32]
FRAME_BITS: [32 64]
CHANNELS: 2
RATE: [8000 384000]
PERIOD_TIME: (83 8192000]
PERIOD_SIZE: [32 65536]
PERIOD_BYTES: [256 524288]
PERIODS: [2 4096]
BUFFER_TIME: (166 16384000]
BUFFER_SIZE: [64 131072]
BUFFER_BYTES: [256 524288]
TICK_TIME: ALL
Only formats reported are: S16_LE S24_LE S32_LE
Volumio reports the PCM5122 as DSD capable and allows playing DSD up to DSD256 (and shows this format in the now playing screen). So does a DSD256 stream get converted to PCM somewhere along the line?
yes, the PCM5122 does not support DSD.
you can hear sound when playing DSD because they are converted on-the-fly to PCM
the Volumio UI shows the format of the file, not the format of the output to the DAC
Thank you Dario, that explains the situation. Does Volumio do the conversion to DSD? If yes, what is DSD converted to? 352.8kHz?
Volumio does automatic conversion to PCM when the selected audio interface does not support DSD
in the CPU is powerful enough for the on-the-fly conversion, the DSD files will play just fine
Sorry if I insist. In order to be clear about the nature of the dsd to pcm conversion that volumio does:
- what algorithm is used (sox?)
- what is the target format (88.2, 176.4 ….)
Tx for your help
unfortunately I don’t know the details about the automatic conversion
It done by mpd by setting dop parameter in mpd.conf
audio_output {
type "alsa"
name "alsa"
device "volumio"
dop "yes"
}
ok, found this explaining MPD’s DSD to PCM conversion towards the end. But unfortunately the doc does not give any details. I guess someone must know how Volumio has configured MPD’s DSD to PCM conversion. Looks like it would use FFMPEG or SOX. Target samplerate would probably be 24/176.4kHz. But I can only guess.
Mpd is conform to DoP open Standard | DSD-Guide.com DoP open Standard | DSD-Guide.com
Thanks, good document. From the text I gathered that DSD64 would correspond to 24/176.4 and DSD128 to 24/352.8
On the HiFiBerry DAC+ Pro board I can play DSD256 and (with some stuttering) DSD512. So these would by analogy get converted to 24/705.6 and 24/1411.2, both of which look like out of reach for a Raspberry. So what gives?
what format is used depends on the capabilities of your audio interface, if a certain sample-rate is not supported it will use the closest available one.
in your case, because the DAC and its driver support up to PCM 384, both DSD256 and DSD512 will be converted to that sample rate, most probably (or to PCM 352,8, if available)
you can check by yourself typing this command from SSH, while playing a certain file:
cat /proc/asound/card2/pcm0p/sub0/hw_params
replace the card number with the one assigned to your interface (in my setup is card2, for example). you can check what the card number is with
aplay -l
this is what I get while playing a DSD256 file on an interface supporting up to PCM 384, it is converted to PCM 384
