alsa-project/alsa-ucm-conf

Can't play 44100hz, 88200hz files Natively.

RenEH01 opened this issue · 13 comments

Can't play audio files at native sample rate. Everything using the Hifi 2.0 output configuration forces a sample rate of 48000hz. When I switch to the Pro Audio driver under pavucontrol, 44100 hz can play natively. Is there a forced resampling occuring in the UCM2 driver?

perexg commented

Which hardware are you using?

Sorry, I should have mentioned it earlier. Realtek 4080 on the MSI b650 Mortar Wi-Fi board.

perexg commented

There is no forced rate or resamling specificed in the configuration file for this hw - https://github.com/alsa-project/alsa-ucm-conf/blob/master/ucm2/USB-Audio/Realtek/ALC4080-HiFi.conf . We had some issues in the USB driver (rate lock when the first device is opened for the given USB sound card), but they should be fixed in the latest kernels. Maybe there's something left. Does "Pro Audio" open only the playback device ? You may check this in procfs - cat /proc/asound/card*/pcm*/sub0/*. Also, which kernel version are you using?

@tiwai : FYI...

Thanks, I am on 6.1.26-1-MANJARO.

I'm not too sure what you mean, but please see below for cat /proc/asound/card*/pcm*/sub0/* when Pro Audio is selected under pavucontrol.

closed
card: 0
device: 3
subdevice: 0
stream: PLAYBACK
id: HDMI 0
name: HDMI 0
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
0
32768
closed
closed
closed
card: 0
device: 7
subdevice: 0
stream: PLAYBACK
id: HDMI 1
name: HDMI 1
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
0
32768
closed
closed
closed
card: 0
device: 8
subdevice: 0
stream: PLAYBACK
id: HDMI 2
name: HDMI 2
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
0
32768
closed
closed
closed
card: 0
device: 9
subdevice: 0
stream: PLAYBACK
id: HDMI 3
name: HDMI 3
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
0
32768
closed
closed
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 16000 (16000/1)
period_size: 512
buffer_size: 32000
card: 2
device: 0
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
state: RUNNING
owner_pid   : 1553
trigger_time: 3500.293964674
tstamp      : 3546.346349508
delay       : 659
avail       : 659
avail_max   : 1084
-----
hw_ptr      : 736671
appl_ptr    : 736012
tstamp_mode: ENABLE
period_step: 1
avail_min: 512
start_threshold: 9223372036854775807
stop_threshold: 32000
silence_threshold: 0
silence_size: 0
boundary: 9007199254740992000
access: MMAP_INTERLEAVED
format: S24_3LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 512
buffer_size: 32768
card: 3
device: 0
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
state: RUNNING
owner_pid   : 1553
trigger_time: 3533.971205011
tstamp      : 3546.346384157
delay       : 828
avail       : 828
avail_max   : 1594
-----
hw_ptr      : 545596
appl_ptr    : 544768
tstamp_mode: ENABLE
period_step: 1
avail_min: 512
start_threshold: 9223372036854775807
stop_threshold: 32768
silence_threshold: 0
silence_size: 0
boundary: 4611686018427387904
access: MMAP_INTERLEAVED
format: S32_LE
subformat: STD
channels: 8
rate: 44100 (44100/1)
period_size: 512
buffer_size: 32768
card: 3
device: 0
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
state: RUNNING
owner_pid   : 1553
trigger_time: 3516.582237525
tstamp      : 3546.346417097
delay       : 2896
avail       : 30379
avail_max   : 31237
-----
hw_ptr      : 1312939
appl_ptr    : 1315328
tstamp_mode: ENABLE
period_step: 1
avail_min: 512
start_threshold: 9223372036854775807
stop_threshold: 32768
silence_threshold: 0
silence_size: 0
boundary: 4611686018427387904
access: MMAP_INTERLEAVED
format: S24_3LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 512
buffer_size: 32768
card: 3
device: 1
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio #1
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
state: RUNNING
owner_pid   : 1553
trigger_time: 3533.995174743
tstamp      : 3546.346445607
delay       : 838
avail       : 794
avail_max   : 1594
-----
hw_ptr      : 544538
appl_ptr    : 543744
tstamp_mode: ENABLE
period_step: 1
avail_min: 512
start_threshold: 9223372036854775807
stop_threshold: 32768
silence_threshold: 0
silence_size: 0
boundary: 4611686018427387904
access: MMAP_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 512
buffer_size: 32768
card: 3
device: 1
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio #1
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
state: RUNNING
owner_pid   : 1553
trigger_time: 3533.948309829
tstamp      : 3546.346474226
delay       : 2768
avail       : 30551
avail_max   : 31579
-----
hw_ptr      : 547159
appl_ptr    : 549376
tstamp_mode: ENABLE
period_step: 1
avail_min: 512
start_threshold: 9223372036854775807
stop_threshold: 32768
silence_threshold: 0
silence_size: 0
boundary: 4611686018427387904
access: MMAP_INTERLEAVED
format: S24_3LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 512
buffer_size: 32768
card: 3
device: 2
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio #2
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
state: RUNNING
owner_pid   : 1553
trigger_time: 3534.016081456
tstamp      : 3546.346508036
delay       : 932
avail       : 888
avail_max   : 1595
-----
hw_ptr      : 543608
appl_ptr    : 542720
tstamp_mode: ENABLE
period_step: 1
avail_min: 512
start_threshold: 9223372036854775807
stop_threshold: 32768
silence_threshold: 0
silence_size: 0
boundary: 4611686018427387904
access: MMAP_INTERLEAVED
format: S24_3LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 512
buffer_size: 32768
card: 3
device: 2
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio #2
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
state: RUNNING
owner_pid   : 1553
trigger_time: 3516.675683040
tstamp      : 3546.346537246
delay       : 4944
avail       : 28331
avail_max   : 31748
-----
hw_ptr      : 1308843
appl_ptr    : 1313280
tstamp_mode: ENABLE
period_step: 1
avail_min: 512
start_threshold: 9223372036854775807
stop_threshold: 32768
silence_threshold: 0
silence_size: 0
boundary: 4611686018427387904
closed
card: 3
device: 3
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio #3
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed



closed
card: 0
device: 3
subdevice: 0
stream: PLAYBACK
id: HDMI 0
name: HDMI 0
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
0
32768
closed
closed
closed
card: 0
device: 7
subdevice: 0
stream: PLAYBACK
id: HDMI 1
name: HDMI 1
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
0
32768
closed
closed
closed
card: 0
device: 8
subdevice: 0
stream: PLAYBACK
id: HDMI 2
name: HDMI 2
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
0
32768
closed
closed
closed
card: 0
device: 9
subdevice: 0
stream: PLAYBACK
id: HDMI 3
name: HDMI 3
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
0
32768
closed
closed
closed
card: 2
device: 0
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
closed
card: 3
device: 0
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
closed
card: 3
device: 0
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
closed
card: 3
device: 1
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio #1
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
closed
card: 3
device: 1
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio #1
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
closed
card: 3
device: 2
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio #2
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
closed
card: 3
device: 2
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio #2
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 512
buffer_size: 32768
card: 3
device: 3
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio #3
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
state: RUNNING
owner_pid   : 1553
trigger_time: 2399.039880204
tstamp      : 3300.869843572
delay       : 5158
avail       : 28162
avail_max   : 31237
-----
hw_ptr      : 39771138
appl_ptr    : 39775744
tstamp_mode: ENABLE
period_step: 1
avail_min: 512
start_threshold: 9223372036854775807
stop_threshold: 32768
silence_threshold: 0
silence_size: 0
boundary: 4611686018427387904

I don't know if this is helpful. but when Hifi 2.0 is selected in pavucontrol this is listed by the same command as above. 

closed
card: 0
device: 3
subdevice: 0
stream: PLAYBACK
id: HDMI 0
name: HDMI 0
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
0
32768
closed
closed
closed
card: 0
device: 7
subdevice: 0
stream: PLAYBACK
id: HDMI 1
name: HDMI 1
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
0
32768
closed
closed
closed
card: 0
device: 8
subdevice: 0
stream: PLAYBACK
id: HDMI 2
name: HDMI 2
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
0
32768
closed
closed
closed
card: 0
device: 9
subdevice: 0
stream: PLAYBACK
id: HDMI 3
name: HDMI 3
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
0
32768
closed
closed
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 16000 (16000/1)
period_size: 512
buffer_size: 32000
card: 2
device: 0
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
state: RUNNING
owner_pid   : 1553
trigger_time: 3500.293964674
tstamp      : 3671.985431387
delay       : 592
avail       : 592
avail_max   : 897
-----
hw_ptr      : 2746895
appl_ptr    : 2746303
tstamp_mode: ENABLE
period_step: 1
avail_min: 512
start_threshold: 9223372036854775807
stop_threshold: 32000
silence_threshold: 0
silence_size: 0
boundary: 9007199254740992000
closed
card: 3
device: 0
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
closed
card: 3
device: 0
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
closed
card: 3
device: 1
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio #1
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
closed
card: 3
device: 1
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio #1
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
closed
card: 3
device: 2
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio #2
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
closed
card: 3
device: 2
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio #2
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
closed
closed
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 512
buffer_size: 32768
card: 3
device: 3
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio #3
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
state: RUNNING
owner_pid   : 1553
trigger_time: 3645.029724962
tstamp      : 3671.985974241
delay       : 2808
avail       : 30550
avail_max   : 31408
-----
hw_ptr      : 1189206
appl_ptr    : 1191424
tstamp_mode: ENABLE
period_step: 1
avail_min: 512
start_threshold: 9223372036854775807
stop_threshold: 32768
silence_threshold: 0
silence_size: 0
boundary: 4611686018427387904
perexg commented

I see 44100Hz in both outputs. You can filter the output only for the problematic card - use aplay -l to list cards and devices eventually cat /proc/asound/cards will work.

I see 44100 as well, but my DAC displays the current sample rate and selecting Hifi 2.0 puts out only 48000hz to the DAC.

perexg commented

It's weird, but it looks like an issue somewhere else (maybe the USB card does some hidden resampling?). The alsa-lib/ucm does not hardcode the rate for this device. The procfs values are from the driver, so the user space sets the rate correctly.

This is a built in motherboard solution. If switching to pro audio fixes issue, I don’t think it’s a hardware thing. Could it be that in the driver somewhere it thinks the Realtek 4080 can’t do 44100hz?

perexg commented

If the 44100Hz is in procfs then the user space already sets to this rate and the driver should issue the USB rate command to the hardware with this settings. You may check the rate settings sent through USB using the dynamic debug for the snd-usb-audio kernel module (dyndbg=+p argument). Like:

echo "options snd-usb-audio dyndbg=+p" > /etc/modprobe.d/alsa-test.conf
# and reboot ...

Look to dmesg for the debug lines..

My previous OS was a clean install of the latest Manjaro build and this issue was present. I now have a clean install of Ubuntu and 23.04 and the issue persists here as well. The pro audio work around does not work with this OS.

Sorry, I don't know what you mean to do with:

echo "options snd-usb-audio dyndbg=+p" > /etc/modprobe.d/alsa-test.conf

and reboot ...

Should I just cut and paste that in my terminal?