问题
我在 Lenovo Yoga ThinkPad X1 Gen4 上运行 Ubuntu 18.04。与相同硬件在 Windows 上的表现相比,音频质量明显不足。Ubuntu 上的最大音量比 Windows 上的 30% 音量还要小。
我该如何改善这种情况?最好同时保持音量键的功能。
我尝试过
alsamixer
增加主音量确实alsamixer
会稍微提高笔记本电脑的音量,但效果不够。而且,效果不会持续。
alsamixer
当我按下时,只报告一个声卡选项F6(这是合理的),并且不提供一些答案建议修改的经常提到的“pcm”的滑块。例如这个答案。
有趣的是,当我使用键盘上的音量键来增加/减少音量时,alsamixer 滑块都不会移动,尽管它们显然会影响音量级别。
系统设置
声音设置中有一个“过度放大”的切换按钮,可将音量最大提高 50%,但会降低音质。这不仅音量不够大,而且音质甚至比以前更差。
扬声器是唯一列出的设备,称为Speaker-sof-skl_hda_card
。
帕武控制
增加 中的音量pavucontrol
似乎与增加 中的主音量水平具有相同的效果alsamixer
。
将 PulseAudio 升级至 v13
我卸载了 PulseAudio v11(apt 中的最新版),并尝试自己构建最新的 PulseAudio。../configure
成功了,但出现警告,称d-bus
版本太旧或不可用。我认为这两种情况都不属实,所以我没有继续,因为感觉不确定。
PulseEffects 与 PulseAudio v12
使用建议的 PPA这个答案我可以成功安装 PulseAudio v12 和 PulseEffects。
重启后,更新本身似乎没有任何明显的效果。
我autogain
按照建议在 PulseEffects GUI 中激活了此评论另一个答案,但虽然它确实有效果,也许能提高一点质量,但音量减少通过激活此选项。
安装正确的驱动程序
联想只列出了适用于 Windows 的驱动程序,尽管联想表示这款笔记本电脑“Linux 认证”。这包括“音频”下的“设备的正确功能”。
也许值得注意的是联想网站谈论一个“Realtek音频驱动程序”,而lspci
只向我报告“英特尔公司设备 9dc8 (rev 11)”。
6.0.8854.1(Realtek 音频)/ 10.23.0.3672(英特尔智能声音技术)
根据认证.ubuntu.com音频硬件是
声音的
Intel 公司 Cannon Point-LP 高清晰度音频控制器 (8086:9dc8)
英特尔公司 未知
模式设置
对于另一个问题,我使用nomodeset
grub 参数启动,结果导致音量键损坏。但这个问题似乎在最近的内核更新中得到了修复。不过,无论有没有nomodeset
,声音本身的质量都很差。
系统信息
uname -a
generic@motorbrot:~$ uname -a
Linux motorbrot 5.3.0-62-generic #56~18.04.1-Ubuntu SMP Wed Jun 24 16:17:03 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
lspci
generic@motorbrot:~$ lspci | grep -i Audio
00:1f.3 Audio device: Intel Corporation Device 9dc8 (rev 11)
aplay -l
generic@motorbrot:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sofsklhdacard [sof-skl_hda_card], device 0: HDA Analog (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: sofsklhdacard [sof-skl_hda_card], device 1: HDA Digital (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: sofsklhdacard [sof-skl_hda_card], device 3: HDMI1 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: sofsklhdacard [sof-skl_hda_card], device 4: HDMI2 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: sofsklhdacard [sof-skl_hda_card], device 5: HDMI3 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
/etc/modprobe.d/alsa-base.conf
# autoloader aliases
install sound-slot-0 /sbin/modprobe snd-card-0
install sound-slot-1 /sbin/modprobe snd-card-1
install sound-slot-2 /sbin/modprobe snd-card-2
install sound-slot-3 /sbin/modprobe snd-card-3
install sound-slot-4 /sbin/modprobe snd-card-4
install sound-slot-5 /sbin/modprobe snd-card-5
install sound-slot-6 /sbin/modprobe snd-card-6
install sound-slot-7 /sbin/modprobe snd-card-7
# Cause optional modules to be loaded above generic modules
install snd /sbin/modprobe --ignore-install snd $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-ioctl32 ; /sbin/modprobe --quiet --use-blacklist snd-seq ; }
#
# Workaround at bug #499695 (reverted in Ubuntu see LP #319505)
install snd-pcm /sbin/modprobe --ignore-install snd-pcm $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-pcm-oss ; : ; }
install snd-mixer /sbin/modprobe --ignore-install snd-mixer $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-mixer-oss ; : ; }
install snd-seq /sbin/modprobe --ignore-install snd-seq $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; /sbin/modprobe --quiet --use-blacklist snd-seq-oss ; : ; }
#
install snd-rawmidi /sbin/modprobe --ignore-install snd-rawmidi $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; : ; }
# Cause optional modules to be loaded above sound card driver modules
install snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-emu10k1-synth ; }
install snd-via82xx /sbin/modprobe --ignore-install snd-via82xx $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq ; }
# Load saa7134-alsa instead of saa7134 (which gets dragged in by it anyway)
install saa7134 /sbin/modprobe --ignore-install saa7134 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist saa7134-alsa ; : ; }
# Prevent abnormal drivers from grabbing index 0
options bt87x index=-2
options cx88_alsa index=-2
options saa7134-alsa index=-2
options snd-atiixp-modem index=-2
options snd-intel8x0m index=-2
options snd-via82xx-modem index=-2
options snd-usb-audio index=-2
options snd-usb-caiaq index=-2
options snd-usb-ua101 index=-2
options snd-usb-us122l index=-2
options snd-usb-usx2y index=-2
# Ubuntu #62691, enable MPU for snd-cmipci
options snd-cmipci mpu_port=0x330 fm_port=0x388
# Keep snd-pcsp from being loaded as first soundcard
options snd-pcsp index=-2
# Keep snd-usb-audio from beeing loaded as first soundcard
options snd-usb-audio index=-2
# sound fix 03. Jun 2020
# did help when combined with running "pulseaudio --start" after reboot.
# But broke birghtness keys.
# See askubuntu.com/questions/1245587/sound-card-not-detected-on-ubuntu-18.04/1246476
# options snd-hda-intel dmic_detect=0
已加载音频驱动程序
按照这个问题我加载的声卡驱动程序是:
generic@motorbrot:~$ /sbin/lsmod | grep snd
snd_soc_skl_hda_dsp 24576 5
snd_soc_hdac_hdmi 32768 1 snd_soc_skl_hda_dsp
snd_soc_dmic 16384 1
snd_hda_codec_hdmi 57344 1
snd_hda_codec_realtek 118784 1
snd_hda_codec_generic 81920 1 snd_hda_codec_realtek
snd_sof_intel_hda_common 73728 1 sof_pci_dev
snd_soc_hdac_hda 24576 1 snd_sof_intel_hda_common
snd_sof_intel_hda 20480 1 snd_sof_intel_hda_common
snd_sof_intel_byt 24576 1 sof_pci_dev
snd_sof_intel_ipc 20480 1 snd_sof_intel_byt
snd_sof 98304 4 snd_sof_intel_hda_common,snd_sof_intel_byt,snd_sof_intel_ipc,sof_pci_dev
snd_sof_xtensa_dsp 16384 1 sof_pci_dev
snd_hda_ext_core 28672 4 snd_sof_intel_hda_common,snd_soc_hdac_hdmi,snd_soc_hdac_hda,snd_sof_intel_hda
snd_soc_acpi_intel_match 32768 2 snd_sof_intel_hda_common,sof_pci_dev
snd_soc_acpi 16384 2 snd_soc_acpi_intel_match,sof_pci_dev
snd_soc_core 241664 6 snd_sof,snd_sof_intel_hda_common,snd_soc_hdac_hdmi,snd_soc_hdac_hda,snd_soc_dmic,snd_soc_skl_hda_dsp
snd_compress 24576 1 snd_soc_core
ac97_bus 16384 1 snd_soc_core
snd_pcm_dmaengine 16384 1 snd_soc_core
snd_hda_intel 53248 0
snd_intel_dspcfg 24576 2 snd_hda_intel,sof_pci_dev
snd_hda_codec 131072 6 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec_realtek,snd_soc_hdac_hda,snd_soc_skl_hda_dsp
snd_hda_core 90112 11 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_ext_core,snd_hda_codec,snd_hda_codec_realtek,snd_sof_intel_hda_common,snd_soc_hdac_hdmi,snd_soc_hdac_hda,snd_sof_intel_hda,snd_soc_skl_hda_dsp
snd_hwdep 20480 1 snd_hda_codec
snd_pcm 102400 11 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_ext_core,snd_hda_codec,snd_sof,snd_sof_intel_hda_common,snd_soc_hdac_hdmi,snd_soc_core,snd_hda_core,snd_pcm_dmaengine
ledtrig_audio 16384 3 snd_hda_codec_generic,snd_hda_codec_realtek,thinkpad_acpi
snd_seq_midi 20480 0
snd_seq_midi_event 16384 1 snd_seq_midi
snd_rawmidi 36864 1 snd_seq_midi
snd_seq 69632 2 snd_seq_midi,snd_seq_midi_event
snd_seq_device 16384 3 snd_seq,snd_seq_midi,snd_rawmidi
snd_timer 36864 2 snd_seq,snd_pcm
snd 86016 23 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek,snd_timer,snd_compress,thinkpad_acpi,snd_soc_core,snd_pcm,snd_rawmidi
soundcore 16384 1 snd
对评论的反应
问题 207407
从bugzilla.kernel.org/show_bug.cgi?id=207407您可以测试该文件的补丁
/usr/share/alsa/ucm2/sof-hda-dsp/HiFi.conf
(评论#16) –劳热奥
我的机器上不存在此文件。但是,确实存在一个文件/usr/share/alsa/ucm/sof-skl_hda_card/HiFi.conf
。显著的差异:
- 它
ucm
代替ucm2
- 这是报告的卡名
aplay -l
链接的 diff 建议将“扬声器”和“耳机”的PlaybackMixerElem
和条目更改为和。 在我的文件中,情况已经如此。这是我的完整文件:PlaybackVolume
PlaybackMixerElem "Master"
PlaybackVolume "Master Playback Volume"
# Use case Configuration for skl-hda-card
SectionVerb {
EnableSequence [
cdev "hw:sofsklhdacard"
]
DisableSequence [
cdev "hw:sofsklhdacard"
]
}
SectionDevice."Speaker" {
Comment "Speaker"
EnableSequence [
cdev "hw:sofsklhdacard"
cset "name='Speaker Playback Switch' on"
]
DisableSequence [
cdev "hw:sofsklhdacard"
cset "name='Speaker Playback Switch' off"
]
Value {
PlaybackPCM "hw:sofsklhdacard,0"
PlaybackVolume "Master"
PlaybackSwitch "Master Playback Switch"
JackHWMute "Headphone"
PlaybackChannels "2"
PlaybackPriority "100"
}
}
SectionDevice."Headphone" {
Comment "Headphone"
EnableSequence [
cdev "hw:sofsklhdacard"
cset "name='Headphone Playback Switch' on"
]
DisableSequence [
cdev "hw:sofsklhdacard"
cset "name='Headphone Playback Switch' off"
]
Value {
PlaybackPCM "hw:sofsklhdacard,0"
PlaybackVolume "Master"
PlaybackSwitch "Master Playback Switch"
PlaybackChannels "2"
JackName "sof-skl_hda_card Headphone"
JackType "gpio"
JackSwitch "12"
JackControl "Headphone Mic Jack"
PlaybackPriority "200"
}
}
<ucm/sof-skl_hda_card/Mics.conf>
该声明
我认为固件和 EC 不是这里的问题,因为在内核 5.4.10 之前一切都运行正常。
这让我有点困惑,因为我的内核目前只是5.4.0
在那之前的。
从 Windows 重新启动
但是,从 Arch 上的内核 5.4.10(最近为 5.6.6)开始,当机器直接启动到 Linux 时,底部的两个扬声器不起作用。Ubuntu 20.04 beta 上也存在同样的问题。但是,如果我先启动到 Windows 10,然后重新启动到 Linux,所有扬声器都可以正常工作。我使用的是 SOF 固件和 PulseAudio 13.99.1,但如果我使用“snd_intel_dspcfg.dsp_driver=1”或“snd_hda_intel.dmic_detect=0”启动,问题仍然存在。
来自 bugtracker 的评论表明更新 PulseAudio 并升级到 Ubuntu 20.04 并不能解决问题。但更重要的是,它表示从 Windows 重新启动到 Linux 而不是冷启动时,所有扬声器上的声音都可以正常工作。
我可以重现这一点 - 但经过进一步检查,我很确定所有四个扬声器从一开始就对我有用。问题只是音质和音量。
问题 208133
在内核错误跟踪器上,还有另一个问题,标记为重复。Thinkpad X1 Yoga gen 4 声音问题:无低音、最大音量太低、PA 只能看到立体声道
使用 Thinkpad X1 Yoga gen 4、Kernel 5.6.14 和 PulseAudio 14,声音情况如下:
好的:
- 麦克风阵列开箱即可正常工作
- 前置和后置扬声器均可直接发出声音
坏的:
- 最大音量有点低
- 低音扬声器根本不工作
- 扬声器系统在 PulseAudio 中显示为立体声设备,而不是 4.1 声道音频设备(另请参阅https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/914)
- PulseAudio 可以看到 DisplayPort 和 HDMI 音频设备的无用断开连接的设备,从而使显示屏变得混乱(另请参阅https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/913)
可能相关有用:如果我
snd_hda_intel.dmic_detect=0
在内核参数中设置,麦克风阵列不再被检测到,但是https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/914和https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/913get固定的。
所以我尝试了在我的笔记本电脑上的效果。添加此内核启动参数之前和之后的snd_hda_intel.dmic_detect=0
区别是(set -u && aplay -l && pacmd list-cards) &> out.txt
在 github 上用 coloring 托管
该部分有相当大的变化profiles:
,但我不知道这是否相关,而且我很难判断这种修改是否改变了音质。现在声音似乎更大了,但如果没有客观的衡量标准,很难判断。
发生的一个变化是它现在是HDA Intel PCH
而不是alsa.card_name = "sof-hda-dsp"
。
联系制造商
我已通过他们的客户支持票务系统联系了联想,他们的回复是
很遗憾地通知您,我们只能为运行 Windows 操作系统的设备提供支持。
如果设备在 Windows 中运行正常,我们将无法提供任何进一步的服务。
我很失望,因为联想网站明确指出这款笔记本电脑是“Linux 认证的”,而且一般来说
联想还将把设备驱动程序直接上传到 Linux 内核,以帮助在工作站的整个生命周期内保持稳定性和兼容性。
新闻.lenovo.com
但似乎他们没有为 Linux 设立任何支持团队。
(编辑:)我现在又收到了来自联想的另一条回复,说我可以联系他们在我所在国家的服务合作伙伴。他们给了我两个电话号码,我一接到电话就会打给他们。
(编辑:)Bugtracker 上有一篇新帖子,我还无法验证。
在带有 SOF 固件的内核 5.8.12 上,该问题似乎已得到解决。非常感谢所有参与的人!