AppleAlc 工具 dump-coeff的使用方法

dump-coeff.sh

工具概述

使用 AppleALC 的 alc-verb 在 macOS 中转储 HDA 编解码器节点的处理功能,

前置准备工作

alc-verb文件放入到/usr/local/bin
命令如下
sudo cp ./alc-verb /usr/local/bin

问题及解决办法

在 AppleALC 中正常设置 Pin Configuration(这是一个单独的问题)。但是在Mac 系统上一些声卡还需要设置供应商特定的处理上限值。

这个脚本可以协助识别这些 ConfigData 中的附加值。

问题:

a)在AppleALC中找到了一个layout,声音看起来像在工作(所有滑块等都存在),但没有声音,而这个声卡在 Linux 上有声音。

b) 在 macOS 和 Linux 的干净启动中,有声音,但在 Windows 中使用 Realtek 声卡驱动程序后,在 macOS 或 Linux 中无声音。同样,滑块存在,声音看起来没问题,但没有声音。

解决方案

通常,这是因为未设置(问题 a.)或设置了特定于供应商的节点上的某些处理功能,但随后由适用于 Windows 的 Realtek 声音驱动程序(问题 b.)再次主动清除(在 sutdown 上)。

诀窍是能够比较有声音和无声音之间的处理上限值。

问题a的解决办法

对于问题a,您需要在Linux中转储参数(带声音)和在macOS中转储参数(无声音)。

问题b的解决办法

对于问题b.您需要在Windows之后的冷启动到macOS(即有声音)和在Windows之后的热启动到macOS(即没有声音)时转储参数。(在 Linux 中进行初始转储仍然很有用,以获取正确的值,请参见下文。ncoeff

Linux 参数转储

注意:如果您已经有完整安装,则可以从完整安装中导出,如果没有可以从Linux live USB导出,方法都是相同的。

首先执行以下命令,该命令会将处理上限转储添加到 Linux 编解码器转储中:

echo 1 | sudo tee /sys/module/snd_hda_codec/parameters/dump_coef

然后使用以下命令转储 Linux 编解码器:

cat /proc/asound/card0/codec#0

您可能需要更改声卡或编解码器编号。

在转储中搜索"processing caps" - 通常只有一个节点具有这些上限。对于具有处理上限的每个节点,将有一个值。ncoeff

macOS 参数转储

使用此 dump-coeff.sh 脚本。

device-index:通常为 0,但您可能需要更改此值才能访问正确的编解码器,我的电脑上就是1。
node-id:在 Linux 编解码器转储中看到的相同节点 ID 值。
count:这应该是在 Linux 编解码器转储中看到的值。ncoeff
该脚本将在 macOS 中以类似于 Linux 编解码器转储的格式转储处理上限值:应适用于 ,在从 Linux 编解码器转储中仅提取相关行后。diff

Windows 参数转储

来自hla63的信息:"华硕博客上的RtHDDump(Windows应用程序)"可用于将这些值转储到Windows上。

现在怎么办?

现在,您可以看到哪些"processing caps"不同。你可能会发现说10或11个值不同。在这一点上,需要一些猜测和常识,以便弄清楚哪些值是重要的 - 通常你只需要改变1或2个值来获得声音,所以你需要实验来找到哪些值是重要的。

假设节点0x20,“processing caps” 0x37 0x0101有声音,而0x0100没有声音。然后,要设置所需的值,您需要执行以下操作:

alc-verb 0x20 0x5 0x37(将处理系数指数设置为接下来读/写)

alc-verb 0x20 0x4 0x0101(设置处理系数的值)

在上述命令之后,编解码器现在将准备好写入(或读取)下一个大写字母(0x38),因此为了测试写入是否有效,我们需要:

alc-verb 0x20 0x5 0x37(将处理系数指数设置为接下来读/写)

alc-verb 0x20 0xC 0x0(读取值处理系数的值)

如何使更改永久生效?
希望经过一些上面的游戏后,你会得到声音。现在,您希望使更改永久生效。这需要打包动词并将它们添加到AppleALC中的布局中。ConfigData

以0x7或0xF开头的动词是3位(12位)动词,例如0x705,0xF05。其他动词是 1 位(4 位)动词。原生 macOS 和原生 Intel HDA 惯例是将 4 位谓词写为单个数字,例如,0x4,0xC;但是Linux惯例是将它们写成三位数字,始终以0作为第2和第3位数字,例如,0x400,0xC00。

12 位谓词的包装如下:

0x0nnvvvdd
4 位谓词的包装如下:

0x0nnvdddd
其中 nn 是节点 ID;v 或 vvv 是动词;dddd 或 dd 是数据。(打包版本始终完全相同,无论用于编写扩展动词的约定如何。

例如:

alc-verb 0x20 0x5 0x37
alc-verb 0x20 0x4 0x0101

包装到:

0x02050037
0x02040101
处理上限设置始终成对出现,如上例所示。第一个动词是SET_COEF_INDEX(又名0x5,0x500),并在节点上设置处理系数,该系数将由下一个命令读取或写入。第二个动词是SET_PROC_COEF(又名0x4,0x400),它实际上设置了值。

找到使用 手动启用声音的最小动词后,您可以打包它们并将其添加到AppleALC中动词数据的末尾,以用于声卡和布局。alc-verb ConfigData

要尝试此操作,您可以直接在 EFI 驱动器上进行编辑。确保标识并编辑您正在使用的编解码器 ID 和布局 ID 的条目。应将任何新值添加到现有 ./EFI/OC/Kexts/AppleALC.kext/Contents/Info.plistConfigData

AppleALC PR?
如果您在Realtek Windows驱动程序之后修复了声音(并且您已经确定了需要更改的最小处理coefs数量),那么将更改作为PR提交给AppleALC可能是一个好主意,因为它可能会为其他用户解决相同的问题。您应始终与原始布局作者核实他们对更改是否满意。

关于语法的说明alc-verb
alc-verb 0x20 0x4 0x0101也可以作为 或 运行 (即 接受 Apple/Intel 语法或 Linux 语法动词)。alc-verb 0x20 0x400 0x0101alc-verb 0x20 SET_PROC_COEF 0x0101alc-verb

在 Linux 上(使用而不是 )后两个版本有效,但第一个版本不起作用(即 只接受 Linux 语法动词)。hda-verb alc-verb hda-verb

从AppleALC版本1.6.9开始使用,所有三个版本都可以正常工作。在版本 1.6.9 之前使用 AppleALC,只有第一个版本可以正常工作。alc-verb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值