13469977015002 发表于 2016-8-12 11:39

AppleALC使用和修改教程

本帖最后由 13469977015002 于 2016-8-21 11:28 编辑

-------------------------------------------------------------------



-------------------------------------------------------------------
操作前必看:
多次安装万能驱动可能会造成不知名的原因无法加载AppleHDA,
确定方法为查看功能扩展中查看AppleHDA是否加载。
已知俩款声卡使用AppleALC无效:ALC662,CX20590
-------------------------------------------------------------------
本教程以ALC887为例,希望方法简单了能让更多小白完美驱动声卡。
在终端输入代码,下载AppleALC
git clone https://github.com/vit9696/AppleALC记录codec中以下内容:
①Address值

address值只有0和2俩种情况,本帖举例中为0

②在codec中搜索Pin Default


如上图如果搜到的内容中间有N/A则不记录(后方有N/A,可记录)

如上图如果搜到的内容无N/A则记录下一串数字后面的设备名称和往上找最近的node值
此处记录的内容为:Line Out at Ext Rear    Node=0x14

整理下记录内容如下:
Line Out at Ext Rear    Node=0x14    线路输出
Mic at Ext Rear            Node=0x18    后置麦克风
Mic at Ext Front         Node=0x19    前置麦克风
Line In at Ext Rear       Node=0x1a   线路输入
HP Out at Ext Front    Node=0x1b   耳机扬声器

这里需要解释下:
对于台式机,可能会出现多个线路输出,至少要把一个线路输出改成内置扬声器。
麦克风最多只可定义一个,所以把前置麦克风改成线路输入。
对于笔记本MIC at ext为外置麦克风,mic at in为内置麦克风,需要把外置麦克风改成线路输入。

更改后内容如下:
Line Out at Ext Rear    Node=0x14    内置扬声器
Mic at Ext Rear            Node=0x18    后置麦克风
Mic at Ext Front         Node=0x19    线路输入
Line In at Ext Rear       Node=0x1a   线路输入
HP Out at Ext Front    Node=0x1b   耳机扬声器



③Vendor Id值,并将其转换为10进制



使用PlistEdit Pro打开appleALC/Resources/PinConfigs/Contents/Info.plist
搜索283904135(此数字为Vendor Id值的10进制)

如上图有不止一个ALC887声卡的配置内容,但是其中的layoutID不同。
先把layoutID=1中的ConfigData后面很长的数字复制出来

如上图将每四串数字排成1行,没串数字的第一个数字代表Address值。
示例中Address=0,所以layoutID=1不适合这款声卡。继续往下找:


每一串数字的第二位+第三位代表node值
每一行的第三串数字中的倒数第二个数字是设备的定义,定义的规则如下:
0 = Line Out
1 = Speaker
2 = HP Out
3 = CD
4 = SPDIF Out
5 = Digital Other Out
6 = Modem Line Side
7 = Modem Handset Side
8 = Line In
9 = AUX
A = Mic In
B = Telephone
C = SPDIF In
D = Digital Other In
E = Reserved
F = Other拿出之前记录的内容和图中对比:
Line Out at Ext Rear    Node=0x14    内置扬声器
Mic at Ext Rear            Node=0x18    后置麦克风
Mic at Ext Front         Node=0x19    线路输入
Line In at Ext Rear       Node=0x1a   线路输入
HP Out at Ext Front    Node=0x1b   耳机扬声器


第一行node值为0x14,第三串数字中的倒数第二个数字是1= Speaker=内置扬声器,符合条件。
第二行node值为0x18,第三串数字中的倒数第二个数字是A= Mic In=内置麦克风,符合条件。
第三行node值为0x19,第三串数字中的倒数第二个数字是8= Line In=线路输入,符合条件。
第四行node值为0x1A,第三串数字中的倒数第二个数字是8= Line In=线路输入,符合条件。
第五行node值为0x1B,第三串数字中的倒数第二个数字是2= HP OUT=耳机扬声器,符合条件。
第六行为多余,删除它。
最后将整理好的数字,替换到info.plist原位置中。记录下其中的LayoutID值=5


将appleALC/Resources/ALC887中的layout5.xml.zlib(5为layoutID值)拖入zlib转换器

点击转换后ALC887文件夹会生成layout5.xml文件,使用PlistEdit Pro打开它。
记录下PathMapID值,此处为1。


将codec导入IDSDT,生成声卡驱动AppleHDAMOD.kext
打开AppleHDAMOD.kext/Contents/Resources复制里面的Platforms.xml文件到ALC887目录下。
然后将其打开更改PathMapID值,之前记录的值为1。

最后将其拖入zlib转换器进行转换完成后会生成Platforms.xml.zlib

再打开ALC887中的info.plist
CodecID值需要改成之前记录的Vendor Id值10进制=283904135

在Platforms下找到ID=5的子项,将Path后面的内容改成Platforms.xml.zlib


打开AppleALC/AppleALC.xcodeproj,生成appleALC



生成的appleALC放入四叶草
layoutID值可先尝试四叶草注入(某些电脑四叶草注入可能无效)
四叶草注入方法:


DSDT注入方法:
先给DSDT打开IRQ补丁:
#Maintained by: RehabMan for: Laptop Patches
#system_IRQ.txt

# This can fix non-working audio and also has an affect on HPET.
#
# Use this if you have issues with patched AppleHDA (required on almost all laptops)
# or if you have issues with HPET (restart after wake).

# IRQ fix
into device name_hid PNP0000 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched;
into device name_hid PNP0100 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched;
into device name_hid PNP0B00 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched;
into device name_hid PNP0103 code_regex IRQNoFlags\s\(\)\n\s+\{.*\} removeall_matched;
into device name_hid PNP0103 code_regex Name\s\(([^,]+),\sResourceTemplate\s\(\).*\n\s+\{((?:.|\n)*)\}\) replace_matched
begin
Name (%1, ResourceTemplate()\n
{\n
    IRQNoFlags() { 0, 8, 11, 15 }\n
%2
})\n
end;
搜索HDEF插入以下函数:
Method (_DSM, 4, NotSerialized)// _DSM: Device-Specific Method
            {
                Store (Package (0x0A)
                  {
                        "hda-gfx",
                        Buffer (0x0A)
                        {
                            "onboard-1"
                        },


                        "layout-id",

                     Buffer (0x04)
                        {         
                           0x05, 0x00, 0x00, 0x00
                        },

                        "PinConfigurations",
                        Buffer (Zero) {}
                  }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
               }其中layoutID可自行更改

可能需要的DTGP函数:
Method (DTGP, 5, NotSerialized)
    {
      If (LEqual (Arg0, ToUUID ("a0b5b7c6-1318-441c-b0c9-fe695eaf949b")))
      {
            If (LEqual (Arg1, One))
            {
                If (LEqual (Arg2, Zero))
                {
                  Store (Buffer (One)
                        {
                           0x03                                          
                        }, Arg4)
                  Return (One)
                }

                If (LEqual (Arg2, One))
                {
                  Return (One)
                }
            }
      }

      Store (Buffer (One)
            {
               0x00                                          
            }, Arg4)
      Return (Zero)
    }



15732157027 发表于 2016-8-12 12:31

技术贴 支持一下

小小的爱 发表于 2016-8-12 12:36

为论坛做贡献值得赞扬!支持了!

zjt131452 发表于 2016-8-12 12:52

这个真心给力,很详细。

zangyichen1998 发表于 2016-8-12 13:17

技术贴,收藏了

小淳 发表于 2016-8-12 13:29

这个真心详细,要想弄好合适自己的,真心需要学习啊

no-cat 发表于 2016-8-12 14:48

楼主写的真详细啊,收藏!再有这种方法驱动ALC662也是可以的,我就是ALC662。不过就是签名显示是未知,不是显示apple

fhybin 发表于 2016-8-12 15:46

太给力了,一直没弄好,再详细学习一下~ 谢谢!!

li5462987 发表于 2016-8-12 15:51

7788mp3 发表于 2016-8-12 16:45

这个真心给力,很详细。

ufo787 发表于 2016-8-12 16:48

等有空在练练手

杉玄 发表于 2016-8-12 16:57

写的挺详细不过需要注意下10.11和10.12的Patch不一样
10.11下用1.0.14版本的话需要修改patch

13469977015002 发表于 2016-8-12 17:09

丶鸭梨大大。 发表于 2016-8-12 16:57 https://www.pcbeta.com/static/image/common/back.gif
写的挺详细不过需要注意下10.11和10.12的Patch不一样
10.11下用1.0.14版本的话需要修改patch

我10.11.6和10.12测试版用的同样的appleALC
不知道你说的区别在哪里
真是没注意过
{:9_348:}

杉玄 发表于 2016-8-12 17:17

13469977015002 发表于 2016-8-12 17:09 https://www.pcbeta.com/static/image/common/back.gif
我10.11.6和10.12测试版用的同样的appleALC
不知道你说的区别在哪里
真是没注意过

8419D411在10.12下是8A19D411

13469977015002 发表于 2016-8-12 17:20

no-cat 发表于 2016-8-12 14:48 https://www.pcbeta.com/static/image/common/back.gif
楼主写的真详细啊,收藏!再有这种方法驱动ALC662也是可以的,我就是ALC662。不过就是签名显示是未知,不是 ...

签名是未知,appleALC就没启到效果哦。

13469977015002 发表于 2016-8-12 17:22

丶鸭梨大大。 发表于 2016-8-12 17:17 https://www.pcbeta.com/static/image/common/back.gif
8419D411在10.12下是8A19D411

这个没注意
不过出了10.12测试版后,重新下载新版appleALC。重新制作新的appleALC
驱动放10.11和10.12俩个系统都正常驱动声卡。

biggreat 发表于 2016-8-12 17:29

支持,写的不错

fhybin 发表于 2016-8-12 17:41

哎~~ 完整的做了一遍,CX20751/2依然是2合1接口的外置MIC无效。
系统重启后音量调节滑条自动变为最大。

13469977015002 发表于 2016-8-12 17:43

本帖最后由 13469977015002 于 2016-8-12 17:47 编辑

fhybin 发表于 2016-8-12 17:41 https://www.pcbeta.com/static/image/common/back.gif
哎~~ 完整的做了一遍,CX20751/2依然是2合1接口的外置MIC无效。
系统重启后音量调节滑条自动变为最大。
2和一接口为特殊情况
如果你的codec中有mic at ext外置麦克风就有解,否则无解。
解决方法为:
把位置麦克风和耳机扬声器那行的第三串数字的最后一个数字改为B

no-cat 发表于 2016-8-12 17:57

13469977015002 发表于 2016-8-12 17:20 https://www.pcbeta.com/static/image/common/back.gif
签名是未知,appleALC就没启到效果哦。

我重新尝试了一下,发现是appleALC没有完全发挥作用。我的驱动是仿冒过的,每次升级都要重新安装方面驱动。在使用appleALC后,升级后不用重新安装驱动了。制作仿冒的时候,bin patch中,发现资料中说的替换0x10ec0885为0x10ec0662对我的声卡来说不行。需要使用0x11d41984这个codecID来替换0x10ec0662,同时把0x10ec0885、0x10ec0884改为0x000000才可以正确识别。估计appleALC中的这部分没有针对ALC622进行修改,不知道能否自己添加上。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: AppleALC使用和修改教程