While Wind*ws was pretty straight forward to setup for good audio quality, Linux left some things to be desired.
My Fiio K3 just acts like a USB-to-optical bridge.
It supports various modes:
Bit depth: 16, 32, DSD256
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Sadly, there are limitations placed on the optical and coaxial Outputs:
Optical goes up to 96kHz / no DSD
Coaxial up to 192kHz / DSD64
To guarantee that my setup does not have a ground loop, I use optical between the Fiio K3 and my DAC: S.M.S.L. SU-8.
By default, my DAC was showing 44.1kHz sampling rate.
Let’s edit the pulse audio config at /etc/pulse/daemon.conf
# pre-edit (commented out with semicolons)
; default-sample-format = s16le
; default-sample-rate = 44100
; alternate-sample-rate = 44100
# after editing
default-sample-format = s32le
default-sample-rate = 96000
alternate-sample-rate = 44100
I keep the alternate sampling rate the same, as a fallback option. I also set up a higher bit depth as well.
As a last step, restart the pulseaudio daemon by killing it:
pulseaudio --kill
That will probably hang a couple applications. Alternatively, reboot or log out and back in.
96kHz is a good middleground. Most songs in my collection are 44100/48000 anyway. At least on Wind*ws I had some problems with Cyberpunk not liking 384kHz.