使用AppleALC修复音频
因此,首先,我们假设您已经安装了Lilu和AppleALC,如果不确定是否已正确加载,则可以在终端中运行以下命令(这还将检查是否已加载AppleHDA,因为如果没有此AppleALC,则没有修补):
kextstat | grep -E "AppleHDA|AppleALC|Lilu"
如果所有3个都出现,那就很好了。并确保不存在VoodooHDA 。否则,这将与AppleALC冲突。
如果遇到问题,请参阅“故障排除”部分
#查找您的布局ID
因此,对于此示例,我们假设您的编解码器为ALC1220。要验证您的身份,您有两种选择:
- 检查主板规格页面和手册
- 在Windows中检查设备管理器
- 运行
cat
在Linux上的终端cat /proc/asound/card0/codec#0 | less
现在有了编解码器,我们将其与AppleALC支持的编解码器列表进行交叉引用:
使用ALC1220,我们得到以下信息:
0x100003, layout 1, 2, 3, 5, 7, 11, 13, 15, 16, 21, 27, 28, 29, 34
因此,它告诉我们两件事:
- 支持哪个硬件版本(
0x100003
),仅当列出多个具有不同布局的版本时才相关 - 我们的编解码器(
layout 1, 2, 3, 5, 7, 11, 13, 15, 16, 21, 27, 28, 29, 34
)支持的各种布局ID
现在有了受支持的布局ID列表,我们准备尝试一些
注意:如果您的音频编解码器是ALC 3XXX,则可能是错误的,而只是重新命名了控制器,请进行研究,以查看实际的控制器是什么。
- ALC3601就是一个例子,但是当我们加载Linux时,会显示真实名称:ALC 671
#测试布局
为了测试我们的布局ID,我们将使用boot-arg alcid=xxx
,其中xxx是您的布局。请记住,一次尝试一个布局ID 。不要添加多个ID或alcid boot-args,如果一个不起作用,请尝试下一个ID等。
config.plist
├── NVRAM
├── Add
├── 7C436110-AB2A-4BBB-A880-FE41995C9F82
├── boot-args | String | alcid=11
#使布局ID更永久
找到适合您的黑客的Layout ID后,我们可以创建一个更永久的解决方案,以更接近实际Mac设置其Layout ID的方式。
使用AppleALC,有一个优先级层次结构,通过该层次结构可以对属性进行优先级排序:
alcid=xxx
boot-arg,对调试有用,并覆盖所有其他值alc-layout-id
在DeviceProperties中,应仅在Apple硬件上使用layout-id
在DeviceProperties中,应同时在Apple和非Apple硬件上使用
首先,我们需要找出音频控制器在PCI地图上的位置。为此,我们将使用一个名为gfxutil的便捷工具 (在新窗口中打开)然后使用macOS终端:
path/to/gfxutil -f HDEF
然后将此带有孩子的PciRoot添加layout-id
到DeviceProperties-> Add下的config.plist中:
请注意,AppleALC可以接受十进制/数字和十六进制/数据,通常最好的方法是十六进制,这样可以避免不必要的转换。您可以使用简单的十进制到十六进制计算器 (在新窗口中打开)找到你的。printf '%x\n' DECI_VAL
:
因此,在此示例中,alcid=11
将变为:
layout-id | Data | <0B000000>
layout-id | Number | <11>
请注意,最终的HEX / Data值总共应为4个字节(即0B 00 00 00
),因为布局ID超过255(FF 00 00 00
)将需要记住这些字节已交换。所以256将变成FF 01 00 00
- 使用十进制/数字方法可以完全忽略十六进制交换和数据大小
提醒:之后必须删除boot-arg,因为它将始终具有最高优先级,因此AppleALC将忽略所有其他条目,例如DeviceProperty中的
#杂项问题
#AMD没有麦克风
- 当在AMD上运行AppleALC时,这是一个常见问题,特别是尚未制作任何补丁来支持Mic输入。目前,“最佳”解决方案是购买USB DAC / Mic或采用VoodooHDA.kext方法。VoodooHDA的问题在于,与AppleALC相比,它不稳定且音频质量较差
#来自Clover的相同布局ID在OpenCore上不起作用
这很可能是IRQ冲突的原因,在Clover上有大量自动应用的ACPI热补丁。解决这个问题有点痛苦,但是SSDTTime (在新窗口中打开)的FixHPET
选项可以处理大多数情况。
对于RTC和HPET从其他设备(如USB和音频)获取IRQ的奇怪情况,可以参考HP Compaq DC7900 ACPI补丁 (在新窗口中打开)垃圾回收库中的示例
#电源状态更改中的内核恐慌10.15
- 在您的config.plist中启用PowerTimeoutKernelPanic:
Kernel -> Quirks -> PowerTimeoutKernelPanic -> True
#故障排除
因此,对于故障排除,我们需要检查以下几点:
#检查您是否有合适的机器人
首先,我们假设您已经安装了Lilu和AppleALC,如果不确定是否已正确加载,则可以在终端中运行以下命令(这还将检查是否已加载AppleHDA,因为如果没有此AppleALC,则无需修补) ):
kextstat | grep -E "AppleHDA|AppleALC|Lilu"
如果所有3个都出现,那就很好了。并确保不存在VoodooHDA 。否则,这将与AppleALC冲突。其他确保您不在系统中的kext:
- RealtekALC.kext
- 三叶草
- 巫毒HDA
- HDA Blocker.kext
- HDAEnabler#.kext(#可以是1、2或3)
嘿Lilu和/或AppleALC没有出现
通常,最好的起点是浏览您的OpenCore日志,并查看Lilu和AppleALC是否正确注入:
14:354 00:020 OC: Prelink injection Lilu.kext () - Success
14:367 00:012 OC: Prelink injection AppleALC.kext () - Success
如果显示注入失败:
15:448 00:007 OC: Prelink injection AppleALC.kext () - Invalid Parameter
您可以检查的主要地方:
- 注射顺序:确保Lilu以kext顺序位于AppleALC上方
- 所有的kexts都是最新版本:对于Lilu插件尤其重要,因为不匹配的kexts可能会引起问题
注意:要设置文件日志记录,请参阅OpenCore调试 (在新窗口中打开)。
#检查AppleALC是否正确修补
因此,使用AppleALC,检查修补程序是否正确最简单的方法之一就是查看音频控制器是否已正确重命名。抢IORegistryExplorer (在新窗口中打开)并查看您是否具有HDEF设备:
从上图可以看到,我们有以下内容:
- HDEF设备意味着我们的重命名可以完成这项工作
- 附加AppleHDAController表示成功附加了Apple的音频扩展
alc-layout-id
是一个属性,显示我们的boot-arg / DeviceProperty注入已成功- 注意:
layout-id | Data | 07000000
是默认布局,alc-layout-id
它将覆盖它,成为AppleHDA将使用的布局
- 注意:
注意:请勿手动重命名音频控制器,这可能会导致问题,因为AppleALC正在尝试修补。让AppleALC做到这一点。
更多示例:
正确的布局编号 | 不正确的layout-id |
---|---|
从上面的2中可以看到,正确的图像缺少许多AppleHDAInput设备,这意味着AppleALC无法将您的物理端口与它可以理解并输出的东西相匹配。这意味着您需要做一些工作才能找到适合您系统的布局ID。
#检查AppleHDA是否为香草
本部分主要与那些用自定义AppleHDA替换现有AppleHDA的用户有关,这将验证您的AppleHDA是否为正品:
sudo kextcache -i / && sudo kextcache -u /
这将检查签名对于AppleHDA是否有效,如果不是,那么您将需要为系统获取AppleHDA的原始副本并替换它或更新macOS(更新时将清除kexts)。仅当您手动修补AppleHDA时才会发生这种情况,因此,如果这是全新安装,则极不可能出现签名问题。
#AppleALC工作不一致
有时,在没有及时为AppleHDAController初始化您的硬件而导致没有声音输出的情况下,可能会发生竞争状况。要解决此问题,您可以:
在boot-args中指定延迟:
alcdelay=1000
或通过DeviceProperties(在您的HDEF设备中)指定:
alc-delay | Number | 1000
上面的boot-arg / property将AppleHDAController延迟1000毫秒(1秒),请注意ALC延迟不能超过3000毫秒(在新窗口中打开)
#AppleALC无法与多个声卡一起正常使用
在少数情况下,如果您有2个声卡(例如板载Realtek和外部PCIe卡),则可能要避免使用不使用或不需要进行修补的AppleALC修补设备(例如本机PCIe卡)。如果您发现存在外部控制器时,AppleALC不会为您的板载音频控制器打补丁,这一点尤其重要。
为了解决这个问题,我们首先需要确定两个音频控制器的位置。最简单的方法是运行gfxutil (在新窗口中打开)并搜索PCI ID:
/path/to/gfxutil
现在,有了如此大的输出,您将想要找到PciRoot路径,对于本示例,让我们使用Creative Sound-Blaster AE-9PE PCIe声卡。为此,我们知道PCI ID为1102:0010
。因此,通过查看我们的gfxutil输出,我们得到以下信息:
66:00.0 1102:0010 /PC02@0/BR2A@0/SL05@0 = PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0)
从这里,我们可以清楚地看到我们的PciRoot路径是:
PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0)
- 注意:这将假定您同时知道外部声卡的供应商和设备ID。作为参考,以下是常见的供应商ID:
- 创意实验室:
1102
- 华硕
1043
- 创意实验室:
- 注2:你的ACPI和PciRoot路径将有所不同,所以要注意你的gfxutil输出
现在我们有了PciRoot路径,我们终于可以打开config.plist并添加补丁了。
在DeviceProperties-> Add下,您需要将PciRoot(作为Dictionary)添加到名为external-audio
以下子项:
DeviceProperties
| --- > Add
| --- > PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0)
| ----> external-audio | Data | 01
完成此操作后,您可以重新启动,AppleALC现在应该忽略您的外部音频控制器!