ALSA、PulseAudio 和 Intel HDA PCH 无声音

ALSA、PulseAudio 和 Intel HDA PCH 无声音

我只有一个板载声卡,即 Realtek ALC298,并且我对高级声音配置没有任何需求。只是一个可以听 YouTube 视频、看电影等的有效音响系统......到目前为止,我已经关注了很多在线文章。总结一下我尝试过的所有方法:

  1. 确定通道是否静音。我使用alsamixer并检查了pavucontrol,两者都显示没有静音频道。我在第三步时重复了此步骤(请参阅下文),并且确实不时显示新频道,但最终没有声音。

  2. 确定是 ALSA 还是只是 PulseAudio 问题。所以我用了aplay -l

**** 播放硬件设备列表 ****
卡 0:PCH [HDA Intel PCH],设备 0:ALC298 模拟 [ALC298 模拟]
  子设备:1/1
  子设备#0:子设备#0
卡 0:PCH [HDA Intel PCH],设备 3:HDMI 0 [HDMI 0]
  子设备:1/1
  子设备#0:子设备#0
卡 0:PCH [HDA Intel PCH],设备 7:HDMI 1 [HDMI 1]
  子设备:1/1
  子设备#0:子设备#0
卡 0:PCH [HDA Intel PCH],设备 8:HDMI 2 [HDMI 2]
  子设备:1/1
  子设备#0:子设备#0
卡 0:PCH [HDA Intel PCH],设备 9:HDMI 3 [HDMI 3]
  子设备:1/1
  子设备#0:子设备#0
卡 0:PCH [HDA Intel PCH],设备 10:HDMI 4 [HDMI 4]
  子设备:1/1
  子设备#0:子设备#0

从那里使用 PCM 格式的 wav 文件aplay -D plughw:0,0 test.wav,它给出:

播放 WAVE 'test.wav':签名 32 位 Little Endian,速率 44100 Hz,立体声

但什么也没有!没有任何声音,扬声器或耳机。我认为这是 ALSA 问题,而不是 PulseAudio 问题,但我确实有疑问,因为 PulseAudio 守护进程在整个步骤中都在运行。作为一个有趣的旁注,当我执行此步骤时,侏儒声音设置显示条形音箱正在移动,就像正在播放某些东西一样:D

  1. 我找到了一个内核网站上的文章关于 HDA 音频和无需重新启动计算机即可动态重新配置音频编解码器的内核能力。我设法找到并使用了该hdajackretask实用程序,它是存储库的一部分 alsa-tools,它为我提供了一个 GUI。该实用程序将引脚修改写入user_pin_configs文件(仅供参考,重新启动后手动验证这一点)。但是我无法找出引脚重新分配的正确组合。以下是可以重新分配的引脚:
0x12
0x13
0x14
0x17
0x18
0x19
0x1a
0x1d
0x1e
0x1f
0x21
  1. 我的想法是基本上使用ALC269模型,因为我看到了有趣的补丁文件当谷歌搜索时。链接是针对 rasp pi 的,但我认为值得一试,因为它ALC269支持的内核 HDA 音频模型。虽然这并没有改变什么,但也许有人可以从中受益。

在此感谢任何帮助。我的 Linux 技能远远超出了我的能力。

PS:manjaro,linux56,尽管所有发行版都存在相同的声卡问题。在过去的几个月里,我几乎安装了所有发行版,希望声音能正常工作。

编辑1

添加了一个帕斯特宾alsa-info.sh了解更多信息。

答案1

好消息!一位名叫 ronincoder 的非常聪明的 Arch 用户发现了耳机插孔的修复方法。我与 ronincoder 合作制作了一个内核补丁 [1],我们的补丁已进入 5.7 内核版本!它也被应用于 5.4 LTS 内核。我启动了 5.7.2 和 5.4.46,耳机插孔的音频响亮而清晰。 :)

对你起作用吗?如果您有三星笔记本 9 Pro NP930SBE-K01US 或 NP930MBE-K04US(ronincoder 的是前者,我的是后者),应该可以。您可以通过运行 alsa_info.sh 并查看“主板名称”来检查您的笔记本电脑型号。 NP930SBE-K01US 和 NP930MBE-K04US 中的 Realtek ALC298 编解码器分别使用“子系统 ID”0x144dc169 和 0x144dc176 来标识自身。如果 snd_hda_intel 看到这些 id 中的任何一个,它就会实施修复。

扬声器怎么样?我报告了内核 bugzilla 上的内部扬声器无声音问题 [2]。 Linux 声音维护者 Jaroslav Kysela 推测可能有一些放大器连接到 HDA 编解​​码器,但这些放大器未由 BIOS 初始化,因此在 Linux 中未激活。他建议使用 QEMU 转储 Windows 驱动程序的编解码器通信。然后,我们可以解析转储并使用 Early Patching [3] 或编写另一个内核补丁在 Linux 中重放通信。雅罗斯拉夫提出这个建议已经一个月了,我已经取得了一些进展,但我仍然没有很好的转储。如果您愿意帮助我,请加入有关内核 bugzilla 的讨论。 ^^

[1] 作为参考,我们的补丁已作为提交 14425f1f521f (ALSA: hda/realtek: Add quirk for Samsung Notebook) 添加到 Linus 树中。[2]https://bugzilla.kernel.org/show_bug.cgi?id=207423 [3]https://www.kernel.org/doc/html/v4.17/sound/hd-audio/notes.html#early-patching

答案2

在elementaryOS(基于Ubuntu 20.04)上,通过编辑配置文件sudo vim /etc/modprobe.d/alsa-base.conf并替换,修复了我的MacBook Pro 2012上没有声音的问题

options snd-hda-intel model=generic

经过

# options snd-hda-intel model=generic
options snd-hda-intel probe_mask=1

进一步的解释细节:

注意:我不确定为什么会出现没有声音的问题,或者之前发生了什么变化,因为它在安装后一开始就可以工作。

但是,pacmd list-cards在终端中查询时,输出从(修复之前)更改为:

ports:
    analog-input-mic: Mikrofon (priority 8700, latency offset 0 usec, available: unknown)
        properties:
            device.icon_name = "audio-input-microphone"
    analog-output-speaker: Lautsprecher (priority 10000, latency offset 0 usec, available: unknown)
        properties:
            device.icon_name = "audio-speakers"
    analog-output-headphones: Kopfhörer (priority 9900, latency offset 0 usec, available: no)
        properties:
            device.icon_name = "audio-headphones"
    iec958-stereo-output: Digitalausgang (S/PDIF) (priority 0, latency offset 0 usec, available: unknown)
        properties:

到(修复后):

ports:
    [Out] Speaker: Speaker (priority 100, latency offset 0 usec, available: unknown)
        properties:
            
    [Out] Headphones: Headphones (priority 200, latency offset 0 usec, available: no)
        properties:
            
    [In] Mic2: Headphones Stereo Microphone (priority 200, latency offset 0 usec, available: unknown)
        properties:

(请注意这里语法的区别。)

另外,输出sudo vim aplay -l从(修复之前)更改为:

Karte 0: PCH [HDA Intel PCH], Gerät 0: Generic Analog [Generic Analog]
  Sub-Geräte: 0/1
  Sub-Gerät #0: subdevice #0
Karte 0: PCH [HDA Intel PCH], Gerät 1: Generic Digital [Generic Digital]           
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0

到(修复后):

Karte 0: PCH [HDA Intel PCH], Gerät 0: CS4206 Analog [CS4206 Analog]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 0: PCH [HDA Intel PCH], Gerät 1: CS4206 Digital [CS4206 Digital]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0

答案3

所以这里的问题是 Realtek 的 ALC298 有不同的总线要求,即 I2S。从 linux56 开始,不支持 I2S 音频编解码器,这似乎是新标准。联想、三星和华为似乎使用了符合这一新 I2S 标准的声卡,并且我发现关于此问题有很多未解决的线程/主题被遗弃。

我找到了一种修复耳机的解决方法,该方法对我和另一个使用 Samsung Notebook Pro 9 的人有效。该解决方案使用名为“早期修补”的内核功能来选择性地覆盖默认引脚、动词、模型和其他特定于 ALSA 的设置属性。您可以找到完整的信息,包括替代的自定义内核补丁Arch Linux 论坛

答案4

尝试下面的这些说明。因为他们可以解决我的系统上的类似问题。

  1. 您运行“aplay”命令,但什么也没听到。运行“sudo aplay”命令怎么样?如果 ALSA 正在工作,您可以听到声音。

  2. 我认为pulseaudio正在您的系统中运行。但 alsa-lib 和 snd-hda-intel 驱动程序之间可能存在一些兼容问题。

    $pacmd 列表卡

检查“端口”上的结果。如果看不到与扬声器相关的内容,则说明pulseaudio无法识别声卡。

  1. 编辑“/usr/share/alsa/ucm2/HDA-Intel/HDA-Intel.conf”文件。如果您在“Define.Use”后面看到一个空字符串,只需在该字符串中输入“3”即可。然后保存。

  2. 重新启动您的机器。如果仍然听不到任何声音,请检查声卡是否为“Dummy Output”。如果是这样,请将“options snd-hda-intel model=generic”添加到“/etc/modprobe.d/alsa-base.conf”的末尾。

该问题主要是由“HDA-Intel.conf”引起的。我真的不明白为什么开发人员将“Define.Use”字符串保留为空。

相关内容