Ubuntu 22.04 LTS下HDMI仅支持48000Hz采样率音频,无法播放44100Hz音频问题求助
嗨,Timbergetter,碰到这种HDMI音频挑采样率的问题确实挺头疼的!我帮你整理了几个常见的排查方向和解决思路,你可以一步步试试:
先确认硬件本身是否支持44100Hz采样率
有些显示器、电视或者HDMI音频设备本身就只支持特定的采样率,咱们先排除这个可能:- 用命令列出所有音频设备:
aplay -l,找到你的HDMI输出设备(通常会标注HDMI,对应的card和device编号记下来,比如card 1: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]) - 查看该设备支持的所有采样率:
aplay -D plughw:<card编号>,<device编号> --dump-hw-params,比如aplay -D plughw:1,3 --dump-hw-params
要是输出里的采样率列表没有44100Hz,那大概率是硬件本身不支持,只能靠系统转码来解决;如果有44100Hz,那就是系统配置的问题。
- 用命令列出所有音频设备:
检查PulseAudio的采样率配置
Ubuntu默认用PulseAudio管理音频,可能它的配置强制了固定采样率,没开启自动转码:- 编辑PulseAudio的配置文件:
sudo nano /etc/pulse/daemon.conf - 找到以下两行,去掉前面的分号(注释),调整参数:
这里设置默认采样率为44100,同时开启重采样,让PulseAudio自动把不匹配的音频转成设备支持的格式default-sample-rate = 44100 alternate-sample-rate = 48000 resample-method = speex-float-1 - 重启PulseAudio生效:
pulseaudio -k && pulseaudio --start
- 编辑PulseAudio的配置文件:
调整ALSA驱动参数
有时候HDMI音频驱动(比如snd_hda_intel)的默认配置会限制采样率,咱们可以试试修改驱动参数:- 编辑ALSA的配置文件:
sudo nano /etc/modprobe.d/alsa-base.conf - 在文件末尾添加一行:
options snd_hda_intel model=generic
如果是NVIDIA显卡的HDMI音频,也可以试试options snd_hda_intel model=nvidia-hdmi,不同显卡型号对应的model参数可能不同,你可以多试几个常见的 - 重启系统后再测试音频
- 编辑ALSA的配置文件:
绕开PulseAudio直接用ALSA测试
要是上面的方法都没效果,咱们可以排除PulseAudio的干扰,直接用ALSA播放测试:
找一个44100Hz的音频文件(比如用ffmpeg转一个:ffmpeg -i input.mp3 -ar 44100 test_44100.wav),然后用命令播放:aplay -D plughw:<card编号>,<device编号> test_44100.wav
如果能出声,那问题肯定在PulseAudio的配置上;要是还是没声音,那基本就是硬件或者驱动的限制了。检查显示器/电视的音频设置
有些外接显示设备的菜单里可以调整音频采样率选项,你可以进设备的设置界面看看,有没有开启44100Hz支持的选项。
你可以先从检查硬件支持的采样率开始,这是最关键的一步,能帮你快速定位问题根源。如果有更多输出信息(比如aplay的结果),也可以补充上来,大家能更精准地帮你排查~
备注:内容来源于stack exchange,提问作者Timbergetter

