Skip to content

简单制作AppleALC驱动声卡并解决耳机、外放切换以及麦克风无输入

Notifications You must be signed in to change notification settings

Dearms/AppleALC-ALCPlugFix

 
 

Repository files navigation

title date categories description tags
    AppleALC-ALCPlugFix
      2017-11-06
Hacintosh
简单制作 AppleALC 驱动声卡并解决耳机、外放切换、麦克风无输入以及耳机杂音、唤醒无声等问题
Hacintosh
黑苹果

前言

vit9696推出AppleALC后,经过越来越多人仿冒声卡得到的数据的提交整理,AppleALC的数据越来越集中,也使声卡驱动变得越来越简单。

本文提供使用AppleALC驱动声卡的思路以及常见错误和驱动后的问题进行修复。

知识小普及

首先要知道声卡仿冒的原理

前期准备

  • 需要下载Xcode

AppleStore下载

  • 下载AppleALC

通过终端执行下面的命令,会下载到你的用户根目录

$ git clone https://github.com/vit9696/AppleALC
  • 下载Lilu

在下面的网址下载DEBUGRELEASE

https://github.com/vit9696/Lilu/releases
  • 提取Codec

这一步需要用到Linux环境,首先下载Ubuntu镜像,我个人提供一个

链接:http://pan.baidu.com/s/1i47I0jN  密码:de4v

当然也可以去官网下载,下载好镜像之后,将U盘格式化为Fat32,然后将镜像解压到U盘,重启以U盘启动,选择试用进入Ubuntu系统界面,打开终端输入

$ cat /proc/asound/card0/codec#0 > ~/Desktop/Codec.txt

执行完后会将Codec.txt提取到桌面,将其保存到U

PS: 一般来说提取的Codec会有10k左右大小,如果大小不够,很有可能提取错误,可以尝试以下命令

$ cat /proc/asound/card0/codec#1 > ~/Desktop/Codec.txt

或者

$ cat /proc/asound/card0/codec#2 > ~/Desktop/Codec.txt

或者

$ cat /proc/asound/card1/codec#0 > ~/Desktop/Codec.txt

Codec.txt的数据整理

  • 记录AddressVendor Id

Codec.txt开头部分

2017-11-06-05

  • 提取节点信息

搜索Pin Default记录Node和节点描述,以我的为例

2017-11-06-03

PS: N/A节点无效无需整理,如下面的不需要整理

2017-11-06-04

  • 记录HP Out at Ext Left节点的tagenable

PS: Unsolicited Response的设定是为了解决耳机和外放切换的问题。 需设定 HP Out at Ext 所在的节点,并且节点信息中有Unsolicited: tag=xx, enabled=1 这一行。 设定命令为Address+NodeID+708+<设定值>

设定值是8位的一个二进制数,记作a7 a6 a5 a4 a3 a2 a1 a0,推算出此二进制数之后,四四拆分转换为2位的十进制数加1即为此设定值

a7表示enabled。 a6=0,没具体应用,不用管。 a5~a0,存放tag。**

  • 记录Mic at Ext节点的Pin-ctls

PS: Pin Control Widget的设定是为了解决耳机杂音的。

需要设定的是 Mic at Ext 所在的节点,设定的值可以从codec dump中读取。

设定命令是 Address+NodeID+707+Pin-ctls值。

整理完后,会得到如下所示的数据集合

2017-11-06-06

PS: 常见的节点设备描述如下:

Mic at Ext--线路输入(耳麦)

Mic at In--内建输入

HP Out--耳机扬声器

Speaker--内建扬声器(外放)

至此,`Codec`数据的整理到此结束

AppleALC中数据的筛选

依次打开下载的AppleALC源码里面/AppleALC/Resources/PinConfigs.kext/Contents下的Info.plist

搜索之前记录的CodecID

2017-11-06-07

记录搜索到的所有的ID中的configdata,如下整理

2017-11-06-08

每一行的每一串的第一个字符代表Address

每一行的第三串倒数第二个字符代表这个节点的设备描述,具体对应关系如下

2017-11-06-01

根据上图设备对应关系和Address值排除掉无效的ID数据

开工

  • 将下载的DebugLilu.kext放进 AppleALC 源码根目录;
  • 删除/AppleALC/Resources中多余文件夹,只留下你的声卡型号文件夹、Pinconfigs.kext以及四个plist文件,以cx20751这个声卡为例剩下如下文件

ALC-2

  • 然后打开计算器,显示为编程器

ALC-3

  • 打开你整理的Codec,找到Vendor Id,拷贝后面的字符串,在计算器选中十六进制,粘贴这个字符串

ALC-4

  • 然后选中十进制,就换转换成十进制形式

ALC-5

  • 拷贝这个十进制数,打开/AppleALC/Resources/CX20751_2/Info.plist(此处的CX20751_2需要换成你的声卡型号),把codecid换成刚才拷贝的十进制数

ALC-6

  • 保存退出,右键PinConfigs.kext显示包内容,打开里面的Info.plist,搜索刚才拷贝的十进制数,记下LayoutID数据,有几个记几个,都记下来,然后将IOKitPersonalities->HDA Hardware Config Resource->HDAConfigDefault中的其他型号删除,(为避免出错,这里的删除可以不操作,删除只是为了精简做出来的AppleALC),保存退出。

  • 然后双击打开 AppleALC 中的工程文件:

ALC-7

  • 按图示操作

ALC-8

  • 点击右面的export

ALC-9

  • next

ALC-10

  • where填上桌面,点export就生成AppleALC在桌面上了,一层一层打开它,将其中的AppleALC.kext放到clover驱动目录,注意之前下载的ReleaseLilu也要放到clover驱动目录,最后不要忘了在config注入LayoutID

ALC-11

  • 如图Audio处写上刚才记下的LayoutID,如果重启后你的声卡不能驱动,或者已驱动但是没有输入或输出,这时很有可能是该LayoutID对应的configdata数据有错误,这时就挨个尝试刚才记录的所有ID

至此, AppleALC 驱动声卡部分结束。

关于解决耳机与内建输入的切换

如果驱动工作完成后,声卡可以工作,但不能自动切换,请接着往下看

  • 打开终端,输入
git clone https://github.com/goodwin/ALCPlugFix 
  • 回车就将ALCPlugFix下载到了你的用户目录,打开此目录中的ALCPlugFix中的main.m下拉到最下方,注意这一部分:

ALC-12

  • 下载had-tools,将codec复制到had-tools目录,打开终端,cd到此目录,输入
./widget_dump.sh 
  • 回车

ALC-13

  • 找到nid = 0x19nid = 0x1a,这里我的19line in1amic in,记录下最后两位,我的是0424就这么改

PS: 这里需要设定的节点数据分别是line inmic in,其他节点无效,思想就是捕获系统在不插耳机时由于其输入输出正常的这两个节点的输出值,然后就可以知道插耳机正常应该输出的值,进而利用AppleALC守护进程动态守护。如果出现插耳机正常,不插无效的情况,请按照这个思路反过来操作,思想都是一样的。其中图上的高亮处最上面一部分是默认情况,中间是耳机移除,最下面是耳机插入,请结合自身使用情况合理设定

ALC-14

  • 保存退出,双击按照AppleALC的编译方法编译这个

ALC-15

  • 然后将生成的ALCPlugFix替换alc_fix中的ALCPlugFix,终端cdalc_fix目录,执行
./install.sh
  • 耳机就可以自动切换了,三节点的朋友运气好的话杂音应该也解决了,这时插入耳机在执行
./widget_dump.sh 
  • 就可以发现之前的191a后面的数据反过来了

其实这里的数据就是侦测耳机插拔状态,向系统发送相关指令来做到切换正常

需要设定的就是两个节点Mic at Ext(有时是Line In)和Mic at In

Mic at Ext(有时是Line In)表示线路输入,即耳麦,多为0x19节点

Mic at In为内建输入

  • PS: 如果widget_dump.sh脚本得不到想要的结果,请在点击这里下载CodecCommander,将Release里面的hda-verb利用命令拷贝到/usr/bin/

ALC-16

  • 如果不行重启一次应该就好了。

至此,解决耳机与内建输入的切换部分结束。

关于唤醒无声

可以先尝试下面两个驱动

CodecCommander EAPDFix 提取密码:w4yr

PS: 关于CodecCommander,可以点击这里参考RehabMan的说明

另外四叶草助手中也提供了相关选项(ResetHDAdartweak),但是本人没有亲自尝试,大家可以自行尝试这些组合:

2017-11-06-09

2017-11-06-10

本人对唤醒无声研究不多,至此,解决耳机与内建输入的切换部分结束,欢迎补充。

关于万能声卡

很多人不喜欢万能声卡,说万能有杂音(但是有一些人的AppleALC也可能有杂音),甚至说用万能声卡是不完美的表现,其实我认为不然,万能是一种很好的渠道,有不少人用万能声卡,他们的切换、输入甚至HDMI都能很好的输出,而且杂音也是可以减小的。

这里我给出官方的项目地址,有兴趣的可以试一下

https://sourceforge.net/projects/voodoohda/

PS: 需要注意的是有人用的是VoodooHDA.pkg安装的,这种情况需要将AppleHDADisabler.kext放到Clover的驱动目录来禁用AppleHDA,否则很有可能会造成KP五果,所以我建议直接用kext,让Clover注入器注入即可。

Credit

vit9696 goodwin RehabMan Dolnor daliansky VoodooHDA

持续更新

About

简单制作AppleALC驱动声卡并解决耳机、外放切换以及麦克风无输入

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 100.0%