概述
近来发现很多新手似乎不太明白驱动声卡的流程,也有同学清楚需要使用 AppleALC.kext,也知道要注入 id,可是就在启动参数那里扔一个 alcid=1 就觉得“我完事了”?,这个其实还没完,还有一些步骤要做,本篇将详细介绍一下驱动声卡的详细方法。
瑞昱 ALC 芯片
对于主流的 瑞昱 ALC 芯片(Realtek ALC),推荐使用 AppleALC.kext,它由 acidanthera 团队开发维护,是一个开放源代码内核扩展(Kernel Extension,缩写 kext),可以无需进行任何文件系统修改就可以为不受苹果官方支持的编解码器提供 HD 音频服务。目前来看,市面上大多数主板均板载了瑞昱的 ALC 芯片,所以 AppleALC.kext 也成为了主流驱动方案。
如何确认你的音频芯片是不是瑞昱,具体是 ALC 哪一款,可以通过以下几种方法:
鲁大师经典版,硬件检测标签下,声卡一栏在大部分情况下可以直接看到瑞昱以及具体 ALC 型号:
或者到主板的官方查看具体参数,比如微星 MPG Z490M
,一般情况下主板厂商会在参数页面明确标注出具体芯片的型号:
此外,如果你已经安装好了 macOS,还可以使用 Hackintool → 音频 进行查看。
仅在极少数情况下,可能存在显示芯片型号和实际芯片型号不一致的情况,常见于 OEM 产品,比如联想的启天 M420 部分机型,此类情况请先百度自己的芯片型号以确定真实的型号。
最后,除了瑞昱的 ALC 系列芯片外,AppleALC 还支持部分其他品牌的芯片(但型号都比较老旧),例如 AnalogDevices、Conexant,IDT 等,具体可参考下面的表格。
厂家 型号 id参数 AnalogDevices AD1984 0x100400, layout 11 ...
推荐 2021-12-22
找到合适的布局 ID
下一步,根据你得到的 ALC 芯片型号信息,在上面的表中找到对应的布局 ID(layout-id),例如 ALC1220 的对应 id 有 1, 2, 3, 5, 7, 11, 13, 15, 16, 21, 27, 28, 29, 34 ,前面可能还有一个修订号,这个指的是硬件版本,个别型号就会有这类情况,就是布局 ID 特别多,不知道用哪个,这个时候推荐优先尝试 11 以下的 id,因为 1-10 是为基本补丁资源预留的布局 ID:
- 台式机优先 1, 2, 3, 5, 7
- 笔记本优先 1, 2, 3, 4, 5, 6, 7, 8
注入启动参数测试布局 ID
这里分为 OpenCore 和 Clover 两种情况。为了快速测出哪个布局 ID 适用你的硬件,推荐使用启动参数注入法。需要注意的是,无论使用 OpenCore 引导还是 Clover 引导,都不要使用下面的 ACPI 重命名补丁,因为 AppleALC 自己可以处理这些问题:
- HDAS to HDEF
- B0D3 to HDAU
OpenCore
下载 AppleALC.kext,把文件放到 /EFI/OC/Kexts/ 目录,然后使用你喜欢的编辑器编辑 config.plist 文件,找到以下位置:
NVRAM → 7C436110-AB2A-4BBB-A880-FE41995C9F82 → boot-args
以 ALC1220 为例,计划测试 1, 2, 3, 5, 7 这几个 ID,直接添加启动参数 alcid=1,重启后若没有效果则修改为 alcid=2,以此类推,直到找到适合使用的布局 ID。
Clover
使用三叶草引导的用户注意,注意需要先关闭以下选项:
- ACPI → Fixes → FixHDA
- ACPI → Fixes → AddHDMI
- Devices → UseIntelHDMI
- Devices → Audio → Inject 的值设置为 No
下载 AppleALC.kext,把文件放到 /EFI/Clover/Kexts/Other/ 目录,然后找到以下位置:
Boot → Arguments
以 ALC1220 为例,计划测试 1, 2, 3, 5, 7 这几个 ID,直接添加启动参数 alcid=1,重启后若没有效果则修改为 alcid=2,以此类推,直到找到适合使用的布局 ID。
固定注入 ALC 布局 ID
经过上一步确定了要使用的 id 以后,就可以把信息固定到设备属性(DeviceProperties)中,这里分为 OpenCore 和 Clover 两种情况。
OpenCore
使用你中意的编辑器编辑 config.plist 文件,找到以下位置:
DeviceProperties → Devices
添加以下 Pci 位置:
PciRoot(0x0)/Pci(0x1F,0x3)
在大多数情况下,板载音频硬件位置就是上述位置,如果不是则可以使用下面的工具来确定具体位置。
可以通过 Hackintool进行查看
图中红线箭头位置即是板载音频芯片所在的 Pci 位置,右键复制即可。
接下来,注入能让 AppleALC 正确运行的信息,以 OpenCore Configurator 为例,设置内容如下图:
参数解释:
- AAPL,slot-name 指的是插槽名称,设置为 Built-in 的意思是“内建”,此项非必须;
- device_type 指的是设备类型,设置为 Audio Device 的意思是“音频设备”,此项非必须;
- model 指的是模型,设置为 300 Series PCH Audio 的意思是“300 系南桥音频”,此项非必须,可根据你自己主板的情况填写,具体可使用工具 Hackintool → PCIe 中查看 Multimedia Controller 类型的设备名称;
- alc-delay 是一个较为特别的属性。在某些特定的情况下,硬件设备未能及时为 AppleHDAController 初始化,导致没有音频输出,较为常见的情况就是从休眠中唤醒。设置 alc-delay 在绝大多数情况下可以解决此类问题,值类型是 NUMBER,设置为 500 的意思是延时 500 毫秒。这个值可以设置为 3000 以内的数值(即最大延时不能超过 3 秒),此项非必须;
- No-hda-gfx 用于不需要显卡音频输出的情况,设置此属性,并将值设置为 0,即可屏蔽独立显卡上的 HDMI/DP 音频输出,此项非必须;
- layout-id 是 AppleALC 最核心的属性,可以使用 DATA 和 NUMBER 两种类型,但是不能同时存在两个 layout-id 属性,如果不熟悉十六进制就照图用 NUMBER 类型即可,此项必须。
- 「注意」如果你的声卡不是板载而是 PCI 或者外置的,需要再增加一个 external-audio 属性,值类型为 DATA,值设置为 01000000。
Clover
使用三叶草引导的用户注意,注意需要先关闭以下选项:
- ACPI → Fixes → FixHDA
- ACPI → Fixes → AddHDMI
- Devices → UseIntelHDMI
- Devices → Audio → Inject 的值设置为 No
然后找到下图中的位置进行设置:
参数解释:
- layout-id 是 AppleALC 最核心的属性,可以使用 DATA 和 NUMBER 两种类型,但是不能同时存在两个 layout-id 属性,如果不熟悉十六进制就照图用 NUMBER 类型即可,此项必须;
- 其它可注入内容可参考 OpenCore 的设置方法;
- 「注意」如果你的声卡不是板载而是 PCI 或者外置的,需要再增加一个 external-audio 属性,值类型为 DATA,值设置为 01000000。
最后,删除启动参数中的 alcid=N,重启计算机即可。至此,使用 AppleALC.kext 驱动声卡的流程结束。
常见问题
Q:注入了所有列出的 id,都没有用。
A:打开终端,输入以下命令,检查 AppleALC 是否正确加载:
kextstat | grep -E "AppleHDA | AppleALC | Lilu"
如果你看到三行分别包含 AppleHDA、AppleALC、Lilu 的输出结果,那么 AppleALC.kext 就是正常加载状态,注意,Lilu.kext 需要在 config 中排到第一位置,否则你的 macOS 系统会出现很多莫名其妙的问题。另外,请勿同时启用下面的 kexts,因为它们和 AppleALC 是冲突的:
- RealtekALC.kext
- CloverALC.kext
- VoodooHDA.kext
- HDABlocker.kext
- HDAEnabler.kext
Q:我的芯片是 ALC,但是不在任何一个列表里怎么办?
A:这种情况先在网上搜索一下你得到的 ALC 芯片型号,有一些控制器是主板厂商自己重新更换了马甲的,例如 ALC3601,其真身是 ALC671。
Q:从 Windows 热重启切换到 macOS 后音频丢失怎么办?
A:可以尝试添加启动参数 alctsel=1 或添加以下设备属性:
alctsel | Data | 01000000
Q:我的声卡无法用 AppleALC 驱动,怎么办?
A:可使用万能声卡驱动 VoodooHDA.kext,效果比 AppleALC 要差一些,不过至少解决了从无到有的问题。