问题

问题

问题

我在 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)

英特尔公司 未知

模式设置

对于另一个问题,我使用nomodesetgrub 参数启动,结果导致音量键损坏。但这个问题似乎在最近的内核更新中得到了修复。不过,无论有没有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和条目更改为和。 在我的文件中,情况已经如此。这是我的完整文件:PlaybackVolumePlaybackMixerElem "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,声音情况如下:

好的:

  • 麦克风阵列开箱即可正常工作
  • 前置和后置扬声器均可直接发出声音

坏的:

可能相关有用:如果我snd_hda_intel.dmic_detect=0在内核参数中设置,麦克风阵列不再被检测到,但是https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/914https://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 上,该问题似乎已得到解决。非常感谢所有参与的人!

相关内容