@tsangyoujun I checked another USB sound card, it lacked support of 24 bit format too. May be it is issue of Linux built-in driver for USB Audio.
How I check supported codec:
cat /proc/asound/card1/stream0
XMOS Khadas Tone Control at usb-0000:00:1d.7-1, high speed : USB Audio
Playback:
Status: Running
Interface = 1
Altset = 1
Packet Size = 72
Momentary freq = 44101 Hz (0x5.8338)
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: S16_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 DSD_U32_BE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000, 705600, 768000
Data packet interval: 125 us
How to see computer converting when playing (while playing a 24/44.1 file)
In MPD log
Mar 19 18:41 : playlist: queue song 1:“Foreign/US UK/Dua Lipa - Dua Lipa (Deluxe) (2017)(24-44)/02. Lost In Your Light (feat. Miguel).flac”
Mar 19 18:41 : decoder: audio_format=44100:24:2, seekable=true
Mar 19 18:41 : client: [0] process command “idle”
Mar 19 18:41 : client: [0] command returned 1
Mar 19 18:41 : alsa_output: opened hw:CARD=Control,DEV=0 type=HW
Mar 19 18:41 : alsa_output: buffer: size=16…131072 time=362…2972155
Mar 19 18:41 : alsa_output: period: size=8…65536 time=181…1486078
Mar 19 18:41 : alsa_output: default period_time = buffer_time/4 = 500000/4 = 125000
Mar 19 18:41 : alsa_output: format=S32_LE (Signed 32 bit Little Endian)
Mar 19 18:41 : alsa_output: buffer_size=22050 period_size=5513
Mar 19 18:41 : output: opened “My ALSA Device” (alsa) audio_format=44100:32:2
Mar 19 18:41 : output: converting in=44100:24:2 -> f=44100:24:2 -> out=44100:32:2
cat /proc/asound/card1/pcm0p/sub0/hw_params
access: RW_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 5513
buffer_size: 22050