如何让音质和音量达到与windows相当的水平?

luc*_*rot 8 sound volume-control drivers 18.04

问题

\n

我在 Lenovo Yoga ThinkPad X1 Gen4 上运行 Ubuntu 18.04。与相同硬件在 Windows 上显示的音频质量相比,音频质量明显较差。Ubuntu 上的最大音量比 Windows 上的 30% 音量要安静。
\n我该如何改进?理想情况下,同时保持音量键的功能。

\n

我尝试过的

\n

阿尔萨混合器

\n

增加主音量确实alsamixer会稍微提高笔记本电脑的音量,但还不够。而且,它不会持续存在。

\n

alsamixer当我按下时,仅报告一个声卡选项F6(这是合理的),并且不为经常提到的“pcm”提供滑块,一些答案建议修改该滑块。例如这个答案

\n

有趣的是,当我使用键盘上的音量键增大/减小音量时,alsamixer 滑块都不会移动,尽管它们显然会影响音量级别。

\n

系统设置

\n

声音设置有一个“过度放大”切换按钮,可将音量最大提高 50%,但会降低音频质量。这不仅声音不够大,而且音质也比以前更差。

\n

扬声器是唯一列出的设备,称为Speaker-sof-skl_hda_card

\n

帕武控制

\n

增加 中的音量pavucontrol似乎与增加 中的主音量级别做了同样的事情alsamixer

\n

将 PulseAudio 升级到 v13

\n

我卸载了 PulseAudio v11(apt 中最新的)并尝试自己构建最新的 PulseAudio。成功后收到有关太旧或不可用的../configure警告。d-bus我认为这些都不是真的,所以我因为不确定而没有继续。

\n

PulseEffects 与 PulseAudio v12

\n

使用此答案中建议的 PPA,我可以成功安装 PulseAudio v12 和 PulseEffects。
\n重启后,更新本身似乎没有任何明显的效果。

\n

我按照另一个答案的评论autogain中的建议在 PulseEffects GUI 中激活,但虽然它确实有效果,并且可能稍微提高了质量,但激活此选项会降低音量。

\n

安装正确的驱动程序

\n

联想只列出了适用于 Windows 的驱动程序,尽管联想声称该笔记本电脑已“经过 Linux 认证”。这包括“音频”下的“设备的正常功能”。

\n

也许值得注意的是,联想网站谈论“ Realtek Audio Driver”,而lspci只向我报告“Intel Corporation Device 9dc8 (rev 11)”。

\n
\n

6.0.8854.1(瑞昱音频)/ 10.23.0.3672(英特尔智能声音技术)

\n
\n

根据Certification.ubuntu.com,音频硬件是

\n
\n

声音的

\n

英特尔公司 Cannon Point-LP 高清音频控制器 (8086:9dc8)

\n

英特尔公司 未知

\n
\n

无模式集

\n

对于另一个问题,我使用nomodesetgrub 参数启动,这反过来又破坏了我的音量键。但这似乎已在最近的内核更新中得到修复。有和没有nomodeset,声音本身的质量都很低。

\n

系统信息

\n

uname -a

\n
generic@motorbrot:~$ uname -a\nLinux 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\n
Run Code Online (Sandbox Code Playgroud)\n

lspci

\n
generic@motorbrot:~$ lspci | grep -i Audio\n00:1f.3 Audio device: Intel Corporation Device 9dc8 (rev 11)\n
Run Code Online (Sandbox Code Playgroud)\n

aplay -l

\n
generic@motorbrot:~$ aplay -l\n**** List of PLAYBACK Hardware Devices ****\ncard 0: sofsklhdacard [sof-skl_hda_card], device 0: HDA Analog (*) []\n  Subdevices: 1/1\n  Subdevice #0: subdevice #0\ncard 0: sofsklhdacard [sof-skl_hda_card], device 1: HDA Digital (*) []\n  Subdevices: 1/1\n  Subdevice #0: subdevice #0\ncard 0: sofsklhdacard [sof-skl_hda_card], device 3: HDMI1 (*) []\n  Subdevices: 1/1\n  Subdevice #0: subdevice #0\ncard 0: sofsklhdacard [sof-skl_hda_card], device 4: HDMI2 (*) []\n  Subdevices: 1/1\n  Subdevice #0: subdevice #0\ncard 0: sofsklhdacard [sof-skl_hda_card], device 5: HDMI3 (*) []\n  Subdevices: 1/1\n  Subdevice #0: subdevice #0\n
Run Code Online (Sandbox Code Playgroud)\n

/etc/modprobe.d/alsa-base.conf

\n
# autoloader aliases\ninstall sound-slot-0 /sbin/modprobe snd-card-0\ninstall sound-slot-1 /sbin/modprobe snd-card-1\ninstall sound-slot-2 /sbin/modprobe snd-card-2\ninstall sound-slot-3 /sbin/modprobe snd-card-3\ninstall sound-slot-4 /sbin/modprobe snd-card-4\ninstall sound-slot-5 /sbin/modprobe snd-card-5\ninstall sound-slot-6 /sbin/modprobe snd-card-6\ninstall sound-slot-7 /sbin/modprobe snd-card-7\n\n# Cause optional modules to be loaded above generic modules\ninstall snd /sbin/modprobe --ignore-install snd $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-ioctl32 ; /sbin/modprobe --quiet --use-blacklist snd-seq ; }\n#\n# Workaround at bug #499695 (reverted in Ubuntu see LP #319505)\ninstall snd-pcm /sbin/modprobe --ignore-install snd-pcm $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-pcm-oss ; : ; }\ninstall snd-mixer /sbin/modprobe --ignore-install snd-mixer $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-mixer-oss ; : ; }\ninstall 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 ; : ; }\n#\ninstall snd-rawmidi /sbin/modprobe --ignore-install snd-rawmidi $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; : ; }\n# Cause optional modules to be loaded above sound card driver modules\ninstall snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-emu10k1-synth ; }\ninstall snd-via82xx /sbin/modprobe --ignore-install snd-via82xx $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq ; }\n\n# Load saa7134-alsa instead of saa7134 (which gets dragged in by it anyway)\ninstall saa7134 /sbin/modprobe --ignore-install saa7134 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist saa7134-alsa ; : ; }\n# Prevent abnormal drivers from grabbing index 0\noptions bt87x index=-2\noptions cx88_alsa index=-2\noptions saa7134-alsa index=-2\noptions snd-atiixp-modem index=-2\noptions snd-intel8x0m index=-2\noptions snd-via82xx-modem index=-2\noptions snd-usb-audio index=-2\noptions snd-usb-caiaq index=-2\noptions snd-usb-ua101 index=-2\noptions snd-usb-us122l index=-2\noptions snd-usb-usx2y index=-2\n# Ubuntu #62691, enable MPU for snd-cmipci\noptions snd-cmipci mpu_port=0x330 fm_port=0x388\n# Keep snd-pcsp from being loaded as first soundcard\noptions snd-pcsp index=-2\n# Keep snd-usb-audio from beeing loaded as first soundcard\noptions snd-usb-audio index=-2\n\n# sound fix 03. Jun 2020\n# did help when combined with running "pulseaudio --start" after reboot.\n# But broke birghtness keys.\n# See askubuntu.com/questions/1245587/sound-card-not-detected-on-ubuntu-18.04/1246476\n# options snd-hda-intel dmic_detect=0\n
Run Code Online (Sandbox Code Playgroud)\n

加载的音频驱动程序

\n

根据这个问题,我加载的声音驱动程序是:

\n
generic@motorbrot:~$ /sbin/lsmod | grep snd\nsnd_soc_skl_hda_dsp    24576  5\nsnd_soc_hdac_hdmi      32768  1 snd_soc_skl_hda_dsp\nsnd_soc_dmic           16384  1\nsnd_hda_codec_hdmi     57344  1\nsnd_hda_codec_realtek   118784  1\nsnd_hda_codec_generic    81920  1 snd_hda_codec_realtek\nsnd_sof_intel_hda_common    73728  1 sof_pci_dev\nsnd_soc_hdac_hda       24576  1 snd_sof_intel_hda_common\nsnd_sof_intel_hda      20480  1 snd_sof_intel_hda_common\nsnd_sof_intel_byt      24576  1 sof_pci_dev\nsnd_sof_intel_ipc      20480  1 snd_sof_intel_byt\nsnd_sof                98304  4 snd_sof_intel_hda_common,snd_sof_intel_byt,snd_sof_intel_ipc,sof_pci_dev\nsnd_sof_xtensa_dsp     16384  1 sof_pci_dev\nsnd_hda_ext_core       28672  4 snd_sof_intel_hda_common,snd_soc_hdac_hdmi,snd_soc_hdac_hda,snd_sof_intel_hda\nsnd_soc_acpi_intel_match    32768  2 snd_sof_intel_hda_common,sof_pci_dev\nsnd_soc_acpi           16384  2 snd_soc_acpi_intel_match,sof_pci_dev\nsnd_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\nsnd_compress           24576  1 snd_soc_core\nac97_bus               16384  1 snd_soc_core\nsnd_pcm_dmaengine      16384  1 snd_soc_core\nsnd_hda_intel          53248  0\nsnd_intel_dspcfg       24576  2 snd_hda_intel,sof_pci_dev\nsnd_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\nsnd_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\nsnd_hwdep              20480  1 snd_hda_codec\nsnd_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\nledtrig_audio          16384  3 snd_hda_codec_generic,snd_hda_codec_realtek,thinkpad_acpi\nsnd_seq_midi           20480  0\nsnd_seq_midi_event     16384  1 snd_seq_midi\nsnd_rawmidi            36864  1 snd_seq_midi\nsnd_seq                69632  2 snd_seq_midi,snd_seq_midi_event\nsnd_seq_device         16384  3 snd_seq,snd_seq_midi,snd_rawmidi\nsnd_timer              36864  2 snd_seq,snd_pcm\nsnd                    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\nsoundcore              16384  1 snd\n
Run Code Online (Sandbox Code Playgroud)\n

对评论的反应

\n

问题 207407

\n
\n

bugzilla.kernel.org/show_bug.cgi?id=207407您可以测试文件的补丁/usr/share/alsa/ucm2/sof-hda-dsp/HiFi.conf(注释 #16)\xe2\x80\x93 laugeo

\n
\n

我的机器上不存在该文件。然而,确实存在的是一个文件/usr/share/alsa/ucm/sof-skl_hda_card/HiFi.conf。显着差异:

\n
    \n
  • ucm它不是ucm2
  • \n
  • 这是报告的卡名aplay -l
  • \n
\n

链接的差异建议将“扬声器”和“耳机”的PlaybackMixerElem和条目更改为和。\n在我的文件中,情况已经如此。这是我的完整文件:PlaybackVolumePlaybackMixerElem "Master"PlaybackVolume "Master Playback Volume"

\n
# Use case Configuration for skl-hda-card\n\nSectionVerb {\n\n    EnableSequence [\n        cdev "hw:sofsklhdacard"\n    ]\n\n    DisableSequence [\n        cdev "hw:sofsklhdacard"\n    ]\n}\n\nSectionDevice."Speaker" {\n    Comment "Speaker"\n\n    EnableSequence [\n        cdev "hw:sofsklhdacard"\n        cset "name=\'Speaker Playback Switch\' on"\n    ]\n\n    DisableSequence [\n        cdev "hw:sofsklhdacard"\n        cset "name=\'Speaker Playback Switch\' off"\n    ]\n\n    Value {\n        PlaybackPCM "hw:sofsklhdacard,0"\n        PlaybackVolume "Master"\n        PlaybackSwitch "Master Playback Switch"\n        JackHWMute "Headphone"\n        PlaybackChannels "2"\n        PlaybackPriority "100"\n    }\n}\n\nSectionDevice."Headphone" {\n    Comment "Headphone"\n\n    EnableSequence [\n        cdev "hw:sofsklhdacard"\n        cset "name=\'Headphone Playback Switch\' on"\n    ]\n\n    DisableSequence [\n        cdev "hw:sofsklhdacard"\n        cset "name=\'Headphone Playback Switch\' off"\n    ]\n\n    Value {\n        PlaybackPCM "hw:sofsklhdacard,0"\n        PlaybackVolume "Master"\n        PlaybackSwitch "Master Playback Switch"\n        PlaybackChannels "2"\n        JackName "sof-skl_hda_card Headphone"\n        JackType "gpio"\n        JackSwitch "12"\n        JackControl "Headphone Mic Jack"\n        PlaybackPriority "200"\n    }\n}\n\n<ucm/sof-skl_hda_card/Mics.conf>\n
Run Code Online (Sandbox Code Playgroud)\n

该声明

\n
\n

我认为固件和 EC 不是这里的问题,因为在内核 5.4.10 之前一切正常。

\n
\n

让我有点困惑,因为我的内核目前只是5.4.0在那之前的。

\n

从 Windows 重新启动

\n
\n

然而,从 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”启动,问题仍然存在。

\n
\n

来自 bugtracker 的评论表明更新 PulseAudio 并升级到 Ubuntu 20.04 并不能解决该问题。但更重要的是,它表示从 Windows 重新启动到 Linux 时,声音适用于所有扬声器,而不是冷启动。
\n我可以重现这一点 - 但经过进一步检查,我很确定所有四个扬声器从一开始就为我工作。问题只是音质和音量。

\n

问题 208133

\n

在内核 bugtracker 上,还有另一个问题,标记为重复。Thinkpad X1 Yoga gen 4 声音问题:没有低音、最大音量太低、PA 只能看到立体声通道

\n
\n

使用 Thinkpad X1 Yoga gen 4、Kernel 5.6.14 和 PulseAudio 14,声音情况如下:

\n

好的:

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

坏的:

\n\n

可能相关有用:如果我设置snd_hda_intel.dmic_detect=0内核参数,则不再检测到麦克风阵列,而是检测到https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/914https://gitlab.freedesktop.org /pulseaudio/pulseaudio/-/issues/913已修复。

\n
\n

snd_hda_intel.dmic_detect=0所以我尝试了一下对我的笔记本电脑有什么影响。(set -u && aplay -l && pacmd list-cards) &> out.txt添加此内核启动参数之前和之后之间的差异由github 上的着色托管
\n该profiles:部分有相当多的更改,但我不知道它是否相关,而且我很难判断是否这一修改完全改变了音质。现在似乎声音更大了,但如果没有客观的衡量标准,这很难说。
\n发生的变化之一是它现在是 aHDA Intel PCH而不是alsa.card_name = "sof-hda-dsp".

\n

联系制造商

\n

我已经通过他们的客户支持票证系统联系了联想,他们的回复是

\n
\n

我们很遗憾地通知您,我们只能为运行 Windows 操作系统的设备提供支持。
\n如果设备在 Windows 中正常工作,我们无法提供任何进一步的服务。

\n
\n

我很失望,因为 lenovo 网站明确指出这台笔记本电脑是“linux 认证的”并且一般来说

\n
\n

联想还将把设备驱动程序直接上游到 Linux 内核,以帮助在工作站的整个生命周期中保持稳定性和兼容性。
\n news.lenovo.com

\n
\n

但似乎还没有为 Linux 建立任何支持团队。

\n

(编辑:)我现在收到了联想的另一条回复,表示我可以联系他们在我国的服务合作伙伴。他们给了我两个电话号码,我一联系就打电话。

\n

(编辑:)bugtracker 上有一篇新帖子,我还无法验证。

\n
\n

在带有 SOF 固件的内核 5.8.12 上,该问题似乎已得到解决。非常感谢所有参与人员!

\n
\n