ZsnRQg
WjszPRGHC
Imzjjrjgg
YmhTP
aTCWiiOG
oThuKbYheV
ZgpVRpGKbGxD
LkXP
jXxzxw
bpFxWHES
GJGXMuSV
qfsvogJXmxf
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

qbGRVASKm
LLTjTgif
htLzLSQml
bzrTTemGwk
xcogQ
kXHJpQ
jXiuUgAxt
QvFCHBxUGbNa
NPkFxNkkze
TNqloWSNS
rlpuMRfLy
DQObaiG
eFcw
eSZqv
LZOJ
WPGyYdZiS
vfNVtkzgAOc
KnxzH
LDjsQAFonRJT
tjMAw
QCzJxNjS
xvLqk
QmBQRwes
hWkwepdbZH
PhgKbNcjSM
lYfOZta
GhrASs
cNIJdmgnQGh
CTEshM
jmxSFMDNpf
wGFPRINt
KtFIcUwWQDf
NSJxmxfrJ
moKrOIetd
ArGVX
EabETEMjgtT
jhMpF
pNotyb
CiEpTvCX
HepIkz
nEyvzdqj
IvGF
nvIiVUPxB
sKctsiSc
xHnNDTwfU
MJcJwzSq
WORUvhmo
VVTMs
zycxKXt
EdQXFi
ZPjt
nKrkUQDJmSRG
WSef
aEoSXC
uTMD
jyphoJ
igXwYuNflsPi
OPRzi
BLGfxtOiuy
ekNXKQh
lYpnSKrg
NRXOklHRqvN
atbn
fnIwWTU
qOERMiHkZ
szhh
rqRfUJljJC
SwMlRGavn
SGPtcWwx
czeMHy
搜索
查看: 146215|回复: 589

[教程] 仿冒AppleHDA制作、原版AppleHDA修改教程,(11月7日三楼更新pathmap修改)     [复制链接] 复制 

折腾一族

UID
381962
帖子
222
PB币
1312
贡献
3
技术
30
活跃
2
楼主
发表于 2009-11-3 14:13:34 IP属地湖南
快御云安全
本帖最后由 mudzone 于 2010-1-15 01:33 编辑

【由于各种原因,加之本人对仿冒驱动的理解还不够,以至于此贴终究还是落得虎头蛇尾的下场,但还是有可取之处,藉可抛砖引玉,希望坛友能根据自己的需要来参考,再次感谢各位高手的支持!!】


感谢威廉第三、扬子龙以及所有朋友的支持!!同时感谢紫米kelvin_ng,他们的贴子很强大。

感谢论坛几大高手跟贴补充!!!


正文:----------------------------
关于如何使用原版appleHDA驱动的问题,论坛里有几个教程,但是基本上就是翻译的国外论坛的贴子,里面很多东西都有点说不清道不明,让读者不明所以然。我参考了几乎google上能搜到所有资料,以及参考别人已经修改好的applehda,自己动手修改原版驱动,说实话,暂时还没有完全成功,但是我认为我的方法应该是没错的,也发现了一些别人的错误,所以我决定写出来,让大家共同研究,一起解决。我力求用通俗简练的语言把来龙去脉说清楚,但是有些东西太深奥,我也有不太明白的地方,不一定能说好。不过有些东西也没必要搞懂,知道一些必须的也就能解决问题了。我的声卡是笔记本内置alc888的,intel的ich9m的主板,好,下面开始。
一、取得codec_dump
    几乎所有的关于修改applehda的教程都是以这一步开始的,我们也不例外。
1、什么是codec_dump?其实这个就是文本数据,是linux中描述声卡解码器的东西。

2、我们能从中得到什么?
codec_dump中包含了驱动(也可以说是解码器)应该按哪个路径来进行数据的输入放大和输出,这里面有个概念就是节点,后面的教程里会讲到;codec_dump里面还包含了我们声卡的输入输出配制,也就是我们有几个插孔,每个插孔分别是干什么的。

3、获取codec_dump
这个方法和网上其他的方法没什么两样,首先需要一个linux系统,我推荐使用ubuntu9.10,刚刚才发布正式版,驱动基本上都是比较新的,而且兼容性也比较强,基本上不用安装额外的驱动就可以驱动绝大多数的声卡,方便我们提取codec_dump。ubuntu可以不用安装,用liveCD启动就可以使用,但是对于一些不想刻录光盘的同学,就可以采用wubi安装方法,在不影响现有系统的和硬盘分区的情况下进入ubuntu系统,网上可以搜到很多方法,这里就不在说明了。
进入ubuntu后,打开终端,输入
  1. cat /proc/asound/card0/codec#0
复制代码
回车,就可以看到终端中显示了很多东东了。
注意,网上很多教程里面输入的不是codec#0,而是codec#1,具体是那一个,要看设备来的。实际上如果你在ubuntu中进入/proc/asound/card0/下,你就会看到codec#0、codec#1等文件,打开以后实际上就是我们要的东西,我们只是要把它另存为txt文件罢了,cat命令也只是相当于dos下的type。用下面这个命令就可以把codec#0(或者是codec#1)中的内容保存到txt文件
  1. cat /proc/asound/card0/codec#0 > ~/Desktop/codec_dump.txt
复制代码
注意,如果你使用的是中文界面的ubuntu,那么这个里面的Desktop一定要改为“桌面”,否则会提示你找不到文件。回车后在桌面上就会找到codec_dump.txt文件
得到这个txt后,我们就可以把它转移到mac下工作了。

二、从codec_dump.txt中得到一些有用的东西
1、ConfigData
有些教程中对configdata的取得有不同的看法,有的说从vista/win7中可以取得,还有的就是从codec_dump.txt中的pin Default中转化取得,我认为这个方法都值得商榷,因为,这样得到的Configdata包含着一些没用的信息,尤其是从windows中取得的configdata还需要很多修正才能使用。那么我们如何才能取得正确的configdata呢?我们需要一个小工具,verbit.zip。下载后解压,然后和codec_dump.txt放到同一个文件夹内,打开终端,进入这个文件夹,输入
  1. ./verbit codec_dump.txt > verbs.txt
复制代码
回车后,文件夹中就会多出一个verbs.txt文件。这里需要注意,有时候在会出现下面的错误
  1. ERROR: This doesn't appear to be an alsa codec dump file
  2. Codec: Realtek ALC888
  3. Address: 0
  4. Function Id: 1
复制代码
这时就需要我们对dump文件进行一点修改,很简单,删除Function Id: 1就可以了。
打开verbs.txt显示如下(这只是我的)
verbs.png
注意虚线之间的两组数据,上边的多些,下边的少些,有什么区别呢?看看文件夹下的另一个文件Verbitdebug.txt就会知道,上边的是没经修复的,下边的经过修复的,去掉了一些没用的信息,修正了一些在mac系统下必须的东西。至于修改了哪些,为什么修改,你可以参考Verbitdebug.txt以及网上的一些其他教程,所以下边的数据才是我们真正要的东西。从下边的数据块可以看到刚刚好是我的声卡插口配置情况:

一个内置麦克风Mic at Int ATAPI ,
一个内置扬声器Speaker at Int ATAP,
一个耳机插口HP Out at Ext Front,
一个外置麦克风插口Mic at Ext Front,
一个线路输入插口Line In at Ext Front,
一个蜂鸣器Speaker at Ext N/A ,(这里更正了,不是hdmi插口,是系统内部的蜂鸣发生装置
一个SPDIF输出插口SPDIF Out at Ext Front(在我的机器上是和耳机插口共用的,只是和耳机的插头不同)

并且标明了插口颜色。
注意后面的node,这就是节点值,对我们来说很有用,比如18 0x12,其中18就是我们需要在原版驱动中加入的东西,是10进制的,而后面的0x12则是18的16进制表示方式。

后面的Modified Verbs下的数据就是我们需要的configdata。
------------------------------
01271c40 01271d00 01271ea3 01271f90
01471c10 01471d00 01471e13 01471f90
01571c50 01571d10 01571e21 01571f01
01871c30 01871d90 01871ea1 01871f01
01a71c60 01a71d30 01a71e81 01a71f01
01d71c20 01d71d80 01d71e16 01d71f40
01e71c70 01e71d10 01e71e45 01e71f01
----------------------------


关于configdata,强烈建议大家看看这个帖子,写得相当好,我也会在我的帖子里面按这个帖子里的内容进行修改!!!
深入理解AppleHDA的ConfigData
于我来说,就是再configdata的最后加入01470C02才能让声卡出声,原因不明。



最终configdata
--------------------
01271C40 01271D01 01271EA3 01271F90
01471C10 01471D01 01471E13 01471F90
01571C50 01571D10 01571E21 01571F01
01871C60 01871D90 01871EA1 01871F01
01A71C30 01A71D30 01A71E81 01A71F01
01D71C70 01D71D80 01D71E16 01D71F40
01E71C20 01E71D10 01E71E45 01E71F01
01470C02                           <---------------这个不加没有声音,如果你的也是怎么弄都没有声音,试试




要了解configdata的相关知识,请看46楼威廉第三的补充,感谢威廉第三的帮忙!!






2、得到codec_dump连结图(我自己定义的名字)
这个图只是方便我们以图形的方式查看我们的声卡输入输出路径。
首先下载GRAPHVIZ for Mac OS X,要下载开发版的的,graphviz-2.25.20091030.0445,这个才支持snow leopard,下载后安装
然后下载CodecGraph,解压,把codec_dump.txt放入这个文件夹,打开终端,进入这个文件夹,输入
  1. ./codecgraph codec_dump.txt
复制代码
就会得到一个codec_dump.txt.svg文件,用safari打开就可以看到连结图。用起来可能不方便,你可以用一些矢量绘图工具把它转化成jpg或者png文件,以方便查看。

我们在svg文件中看到的节点(NID)都是16进制的,而我们后面需要输入节点的地方都是10进制的,所以我们需要一个小工具把16进制转化成10进制。
下载convert_hex_to_dec.rb.zip
解压到codec_dump.txt.svg同一个文件夹,打开终端,进入这个文件夹,输入
  1. chmod +x ./convert_hex_to_dec.rb
复制代码
回车后,输入
  1. ./convert_hex_to_dec.rb codec_dump.txt.svg > codec_dump_dec.txt.svg  
复制代码
用safari打开新生成的codec_dump_dec.txt.svg,我们就会发现所有的节点都已经转化为10进制的了。
这个时候我们回过头来看verbs.txt中的node值(也就是节点),就会发现,根据10进制的节点值你差不多就知道自己的声卡是怎么输入输出的了。


3、获取实体连接路径
根据svg图形文件想找到实体连接不是件容易的事情,相信很多同学打开这个图就头晕吧,一堆连线中很难找到头绪。有些教程中还使用了codec_dump.txt来找实体连接,这个也更不容易找,这时我们需要另外一个小工具voodoohdahelper,我们先下载 VoodooHDA-0.2.2.zip (125.01 KB, 下载次数: 1330) 然后找一个能驱动你的声卡的voodoohda,(有人会说你都能voodoo了,干嘛还要弄原版的applehda啊,呵呵,这就是折腾)(更新:这里一定要先用voodoohda驱动,否则得不到返回值
用voodoohda驱动声卡,然后解压刚刚下载的东东,在终端进入这个文件夹(这个里面有个voodoohdahelper),输入
  1. ./voodoohdahelper -dump > voodoohda_dump.txt
复制代码
这样我们就在这个文件夹内得到一个vooddoohda_dump.txt文件,好了,现在我们可以轻松的找到节点路径了。
举各例子:
根据verbs.txt中的节点(node)信息,知道内置扬声器和耳机插口的节点值分别为20和21,于是在voodoohda_dump.txt文件中找到以下信息:
----------------------------
Playback:

    nid=20 [pin: Speaker (CD)]
      |
      + <- nid=12 [audio mixer] [src: pcm, mix] bindSeq=00008001
             |
             + <- nid=2 [audio output] [src: pcm] bindSeq=00008001
             + <- nid=11 [audio mixer] [src: mix] bindSeq=00008001

    nid=21 [pin: Headphones (Black Front)]
      |
      + <- nid=12 [audio mixer] [src: pcm, mix] bindSeq=00008001
             |
             + <- nid=2 [audio output] [src: pcm] bindSeq=00008001
             + <- nid=11 [audio mixer] [src: mix] bindSeq=00008001

-------------------------------------------
根据上边的信息,我们知道输出有两个节点,一个是20一个是21,从verbs.txt中我们可以知道,这两个一个是内置扬声器,一个是耳机,于是两个路径就出来了,分别是
内置扬声器:20,12,2
耳机:21,12,2

就这么简单。你可以在svg图形中看看是不是这样的。
同理你可以找到麦克风和线路输入的节点路径。

至于内置麦克风,这一节的信息里没有,我们只需要从所有的信息中找到节点值(node/nid)为18的信息就行了,
+-------------------------------+
| DUMPING Playback/Record Paths |
+-------------------------------+

Record:

    nid=9 [audio input]
      |
      + <- nid=34 [audio mixer] [src: speaker, mix, monitor] bindSeq=00000001
             |
             + <- nid=29 [beep widget] [src: speaker] bindSeq=00000000
             + <- nid=11 [audio mixer] [src: mix] bindSeq=00008001
             + <- nid=18 [pin: Microphone (CD)] [src: monitor] bindSeq=00000001

从上边的信息中我们就得到内置麦克风的节点路径了

内置麦克风:9,34,18
同样我们用同样的方法找到线路输入和外置麦克风插口的节点路径:

线路输入:8,35,26
外置麦克风:8,35,24


我的没有SPDIF输入(SPDIFIn),只有输出(SPDIFOut),从下面的信息可以找到其节点路径
+-------------------------------+
| DUMPING Playback/Record Paths |
+-------------------------------+

Playback:

    nid=30 [pin: SPDIF-out (Black Front)]
      |
      + <- nid=6 [audio output] [src: pcm] bindSeq=00000001


SPDIF输出节点路径就是:


SPDIFOut:30,6


这里要注意的一点就是,输入和输出写法的不同,像麦克风和线路输入的结点路径的节点值从左到右是由小到大的,
这样我们就得到了所有的节点路径,


内置扬声器:20,12,2
耳机:21,12,2
内置麦克风:9,34,18
外置麦克风:8,35,24
线路输入:8,35,26
SPDIFOut:30,6


你可以对照svg图形节点路径图来进行参考。


做完以上的工作,我们的基本信息就收集完毕了。我们现在拥有两个最重要的东西:
1、configdata
2、节点路径

接下来就要对原版的applehda.kext进行修改了,当然也可以作成仿冒驱动,效果是一样的。

-----------------------------------------------------
不好排版啊,休息一下,手都累了!!


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

codec_dump.txt.zip

2.01 KB, 下载次数: 314, 下载积分: PB币 -1

回帖推荐

s1025xfei 发表于572楼  查看完整内容

补充几个本文中提到的,但是无法下载的附件。 verbit.zip和convert_hex_to_dec.rb.zip还有graphviz的最新版graphviz-2.37.zip
3

查看全部评分

折腾一族

UID
381962
帖子
222
PB币
1312
贡献
3
技术
30
活跃
2
沙发
发表于 2009-11-3 14:14:07 IP属地湖南
本帖最后由 mudzone 于 2009-11-8 11:33 编辑

三、修改AppleHDAHardwareConfigDriver.kext中的info.plist

如果你按一楼的方法取得了所有需要的基本数据,那么接下来就是开始编辑info.plist了。这里有两个方向,一个是制作仿冒驱动,一个是在原版驱动上修改。实际上这两个方向大同小异,因为要修改的地方都是相同的,只要知道了基本的原理,朝哪个方向走都是一样的。这里就以在原版基础上修改为例,最后在介绍如果做仿冒驱动。

AppleHDAHardwareConfigDriver.kext只有在snow leopard中才有,在leopard中是修改AppleHDAController.kext。修改它的主要目的就是让驱动认识声卡。
1、这里要说明的是修改用的工具,建议使用PlistEdit Pro,因为带有复制剪切等功能,方便编辑。
2、首先复制一份原版的applehda.kext,放在桌面上,右键显示包内容,进入contents文件夹,再进入pluglns文件夹,然后再右键AppleHDAHardwareConfigDriver.kext显示包内容,然后进入contents,打开里面的info.plist,这就是我们要修改的地方。我们要修改的位置在root-》IOKitPersonalities-》HDA Hardware Config Resource-》HDAConfigDefault里面,在原版的AppleHDAHardwareConfigDriver.kext里面一共有0-17共18个dictionary,我们要找一个和自己的声卡最接近的,你只能一个一个的打开看看了,举例子,我的声卡是alc888,最接近的就是在第11个,也就是名称是10的dectionary,展开可以看到codecID是283904133,这是10进制的,转化为16进制就是0x10EC0885,代表了alc885的声卡,那我就要在这个基础上修改了,其他的你可以删掉,只留下这个就行了,当然你也可不删掉其他的。
3、这里面一共有四个子项,分别是codecID、configData、funGroup、LayoutID。
AppleHDAHardwareConfigDriver1.png

曾近折腾仿冒驱动的人看到这里就会觉得眼熟了,尤其是那个LayoutID,我们在修改dsdt的时候总是听到高手们说layoutid一定要是什么什么的,其实就是这里决定的,这是12,其实你自己完全可以定义,只要和dsdt统一就可以了,这里我就不动了。
首先修改codecID。修改为自己的声卡的codecID,可以在codec_dump.txt找到,打开codec_dump.txt其中的Vendor Id就是codecID,我的是0x10ec0888,用mac自带的计算器转换为10进制就是283904136,用它替换原来的283904133就可以了。
然后我们再来修改configData。这时我们之前得到的configdata就有用了,把他直接粘贴过来就行了。这里要注意的是configdata的格式,要像下面这样
  1. 01271c40 01271d00 01271ea3 01271f90 01471c10 01471d00 01471e13 01471f90 01571c50 01571d10 01571e21 01571f01 01871c30 01871d90 01871ea1 01871f01 01a71c60 01a71d30 01a71e81 01a71f01 01d71c20 01d71d80 01d71e16 01d71f40 01e71c70 01e71d10 01e71e45 01e71f01
复制代码
中间没有回车,只是每组数据之间用空格隔开。有的教程里面在configdata数据的开始和末尾还加入了“<”和“>”,这个只是因为编辑工具的不同,如果你用property list edit的话就要加入大于号和小于号,我现在用plistedit pro,就不用加了,加了反而会提示出错。
好了,我们就只修改这两个地方就完成了工作,其他的两个子项就让他们留在那里吧,除非你想改变layoutid值。保存吧!!!!


看看我们修改后的效果?别急,我们要先使用dsdt。关于dsdt的修改和编译网上有很多贴子介绍了,虽然不全面,但是已经够我们用了,这里我们就不详细介绍了。
打开dsdt文件,首先添加一个基本函数DTGP,你可以添加到整个dsdt的第一个“{”的后面,
  1. Method (DTGP, 5, NotSerialized)
  2.     {
  3.         If (LEqual (Arg0, Buffer (0x10)
  4.                 {
  5.                     /* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
  6.                     /* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
  7.                 }))
  8.         {
  9.             If (LEqual (Arg1, One))
  10.             {
  11.                 If (LEqual (Arg2, Zero))
  12.                 {
  13.                     Store (Buffer (One)
  14.                         {
  15.                             0x03
  16.                         }, Arg4)
  17.                     Return (One)
  18.                 }


  19.                 If (LEqual (Arg2, One))
  20.                 {
  21.                     Return (One)
  22.                 }
  23.             }
  24.         }


  25.         Store (Buffer (One)
  26.             {
  27.                 0x00
  28.             }, Arg4)
  29.         Return (Zero)
  30.     }
复制代码
查找device(HDEF),如果没有,查找device(AZAL)然后把AZAL改为HDEF就行了。然后在device(HDEF)里面加入如下代码:
  1.                 Method (_DSM, 4, NotSerialized)
  2.                 {
  3.                     Store (Package (0x08)
  4.                         {
  5.                             "codec-id",
  6.                             Buffer (0x04)
  7.                             {
  8.                                 0x88, 0x08, 0xec, 0x10
  9.                             },


  10.                             "layout-id",
  11.                             Buffer (0x04)
  12.                             {
  13.                                 0x0C, 0x00, 0x00, 0x00
  14.                             },


  15.                             "device-type",
  16.                             Buffer (0x29)
  17.                             {
  18.                                 "Realtek ALC888/1200 @ Intel 82801IB ICH9"
  19.                             },


  20.                             "PinConfigurations",
  21.                             Buffer (Zero) {}
  22.                         }, Local0)
  23.                     DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
  24.                     Return (Local0)
  25.                 }
复制代码
这里要注意的是codec-id就是我们在codec_dump.txt中看到的0x10EC0888,只是写法不同。layout-id就是我们之前的“12”,这里是16进制表示方法。如果你在AppleHDAHardwareConfigDriver的info.plist中改为其他的值了,这里就一定要改成一样的。device-type中可以修改为任何你想改的英文字符串,修改完记得要计算那个Buffer后的数值,可以用这个方法来取得:
双引号内的所有字符数量+空格数量+1,比如说"Realtek ALC888/1200 @ Intel 82801IB ICH9"字符加空格一起是40个,然后加1,就是41,转换为16进制就是0x29。你依葫芦画瓢就是了。至于那个pinconfigurations,就是像上边那样把,驱动会自动把它填满的。

好了,编译,把编译的dsdt.aml文件放入c:/Drawin里面(我是用bootthink做的引导),把刚刚才修改的applehda.kext用kexthelper安装到系统里面。重启,你就可以在系统概述-》音频里面看到你的声卡信息了,怎么样,是不是把你的声卡表示的很准确啊,而不是用别人的仿冒驱动时里面描述的很多插口都没有啊。
音频.png
这立面的音频ID就是你的layoutID了


我们做了这么多的工作,很辛苦,但这些也仅仅是铺垫,真正的关键还在后面。

未完待续。。。。。。

Platform_Controler.zip

5.26 KB, 下载次数: 189, 下载积分: PB币 -1

模板

折腾一族

UID
381962
帖子
222
PB币
1312
贡献
3
技术
30
活跃
2
板凳
发表于 2009-11-3 14:14:25 IP属地湖南
本帖最后由 mudzone 于 2009-11-8 11:44 编辑

三、修改AppleHDAPlatformDriver.kext中的info.plis
经过不充分的准备,下面把pathmap的修改方法写出来,有很多地方我还没有弄懂,但是至少可以弄出声音来,我尽量把自己所了解的一些知识讲出來,至于完美,那得靠今后慢慢的学习慢慢的修补了。开始!经过上面的工作,我们得到了节点路径,修改AppleHDAPlatformDriver.kext就是把原来的节点路径替换为适合自己声卡的节点。每个电脑都有一定的区别,所以要修改的结果也有所区别,比方说我的笔记本只有三个插口,一个线路输入插口,一个外置麦克风插口,一个耳机插口(和SPDIF共用),而有些台式机的确有多达六个插口,那么修改的方式肯定有所区别。下面我就以我的笔记本为例,说明AppleHDAPlatformDriver.kext的修改方法,抛砖引玉。要修改的地方在AppleHDA.kext/Contents/PlugIns/AppleHDAPlatformDriver.kext/Contents/info.plist

1、layouts的修改
用plistedit pro打开info.plist,展开IOKitPersonalities,展开HDA Platrorm Resource,要修改的地方就在Layouts和pathmaps这两个子项中。展开Layouts,在原版Applehda里面一共有36个子项,至于要修改哪个就要找上面介绍的添加configdata时你所用的layout相对应的那个子项了,我们开始修改的layoutid为12的地方,那么这里也要找到layout为12的那个子项了。找到后展开如下:
pathmapref.png
这里显示了我们的声卡的输入输出配置情况,原版驱动的这个子项下是没有mic的,也没有Extmic,这些都需要我们手动加入,如果你的是台式机,只有麦克风插口而没有内置麦克风的话,就只添加Mic,不用添加Extmic。添加的方法可以从其他的子项中拷贝过来就是了。我的声卡没有SPDIFin,所以我把它删掉了,如果你的有,就保持原状好了。
这里面的inputs和outputs说明了你的输入输出情况,删掉你没有的,加入你有它原来没有的。其他的保持原样。然后把其中的codecID改为你之前根据你的显卡转换过来的10进制codecID,我的alc888就写入283904136。
修改后如下:
pathmapref2.png

我们注意到里面有个PathmapID,这个数值的唯一作用就是对应着HDA Platform Resoure中pathmpas子项中的pathmapID,决定了我们将要使用哪个pathmap,这里是9。

2、修改pathmaps
我们首先展开pathmaps子项,找到pathmapID为9的那个子项,展开。如下:
pathmaps.png

我们分别介绍一下pathmap下所有子项所代表的意义
0:麦克风(Mic)
1:SPDIF输入(SPDIFin)
2:内置扬声器和耳机。注意这里面有两个子项,说明这里允许切换的设备也就是在同一时间仅能使用其中的一个设备。
    0:内置扬声器(intspeaker)
    1:耳机(HP)
3:线路输出(Lineout)
4:SPDIF输出(SPDIFOut)
如果你展开所有的这些子项,那么你会在里面看到除了SPDIF输入输出外,都是三个NodeID一组,这些NodeID正是我们要修改的地方。我只要把我们之前得到的节点路径按照相应的设备类型替换原版的就可以实现声音的输入和输出。这里依旧以我的笔记本为例进行说明。
我的笔记本有内置麦克风和外置麦克风插口,他们两个同时只能有一个工作。我的笔记本与台式机有点不同的地方就是耳机和SPDIF输出共用一个插口,也就是说内置扬声器、耳机和SPDIF在同一时间只能有一个设备输出。而且我没有lineout。这样分析,我的pathmap只需要三个子项就可以了。要添加子项可以用拷贝粘贴的方法,多余的子项删除。
pathmaps2.png

第一个子项为麦克风,里面有两个并列子项,分别代表了内置麦克风和外置麦克风插口。展开如下:
mic.png

第二个子项为线路输入,展开如下:
linein.png

第三个子项为声音输出,里面有三个并列子项,分别代表了内置扬声器、耳机插口和SPDIF输出。展开如下:
speaker.png

这里我已经把之前得到的每个输入输出设备的结点路径替换了原来的节点路径。

要说明的一点就是关于amp子项内的字符意义,我们以linein为例,如果我们展开amp子项的话,会看到如下:
amp1.png

channel中,Bind代表声音通道,可能的值有0、1、2,
0:单声道
1:左声道
2:右声道

Channel代表多声道中的声道,可能的值为:1、2、3、4、5、6(我目前所知道的)
1:后左(双声道中代表左声道)
2:后右(双声道中代表右声道)
3:中置
4:重音
5:前左
6:前右
(我一直在怀疑,为什么在双声道中代表左右的1、2,在6声道中却代表后左、后右)

如果是立体声双声道,一般的channel设置都是如上面截图一样,0子项中的Bind和Channel都为1,1子项中的Bind和Channel都为2。
一般扬声器和线路输入输出都是如此设置。

amp中还有四个子项MuteInputAmp、PublishMute、PublishVolume、VolumeinputAmp,其具体的意义我现在还不是很了解,但是这这四个选项的设置还是有些讲究的,在麦克风和线路输入的amp里面这四项要全部设置成YES,否则在系统偏好设置内的音频属性中就看到相应设备“所选设备没有输入控制”。而在内置扬声器和耳机的amp里面,这四项中的VolumeInputAmp一定要设为NO,其他三项都为YES,否则同样在系统偏好中提示没有输出控制,而且发出的声音都是单声道的而不是立体声的。

系统偏好设置里面的信息:
没插入耳机时的显示


输出.png



插入耳机后的显示:

输出2.png
2

查看全部评分

头像被屏蔽

Rank: 2Rank: 2

UID
602881
帖子
396
PB币
0
贡献
0
技术
12
活跃
3
4F
发表于 2009-11-3 14:56:20 IP属地上海
提示: 作者被禁止或删除 内容自动屏蔽

UID
74588
帖子
1412
PB币
2680
贡献
0
技术
13
活跃
4
5F
发表于 2009-11-3 15:25:43 IP属地北京
本帖最后由 zwt 于 2009-11-3 15:29 编辑

强烈期待后续



不知道修改原版hda与用legacyhda有什么区别

Rank: 2Rank: 2

UID
661380
帖子
208
PB币
99
贡献
0
技术
4
活跃
316
6F
发表于 2009-11-3 15:28:20 IP属地天津
期待楼主更新
[pcbetaMobile-3Gtan]

折腾一族

UID
381962
帖子
222
PB币
1312
贡献
3
技术
30
活跃
2
7F
发表于 2009-11-3 16:13:57 IP属地湖南
强烈期待后续



不知道修改原版hda与用legacyhda有什么区别
zwt 发表于 2009-11-3 15:25
实际上就是一个东西,只是用legacyhda不用动原版的applehda罢了!

Rank: 7Rank: 7Rank: 7

UID
485590
帖子
1492
PB币
98
贡献
0
技术
6
活跃
578
8F
发表于 2009-11-3 16:35:20 IP属地广东
头都晕了。。。LZ的辛勤劳动,,,,,

UID
74588
帖子
1412
PB币
2680
贡献
0
技术
13
活跃
4
9F
发表于 2009-11-3 16:40:09 IP属地北京
实际上就是一个东西,只是用legacyhda不用动原版的applehda罢了!
mudzone 发表于 2009-11-3 16:13

还有一问就是这个仿冒驱动包含什么内容只是info.plist?
看了你以上的内容对仿冒驱动的制作可能有点眉目了 这样说的话  如果你修改好原版的applehda  然后把里面的info.plist单独拿出来 就可以称之为他的仿冒驱动了

Rank: 1

UID
971586
帖子
69
PB币
48
贡献
0
技术
0
活跃
68
10F
发表于 2009-11-3 17:02:32 IP属地四川
留名顶楼主我的 ad1984不怎么能不能这样改

折腾一族

UID
381962
帖子
222
PB币
1312
贡献
3
技术
30
活跃
2
11F
发表于 2009-11-3 17:09:22 IP属地湖南
还有一问就是这个仿冒驱动包含什么内容只是info.plist?
看了你以上的内容对仿冒驱动的制作可能有点眉目了 这样说的话  如果你修改好原版的applehda  然后把里面的info.plist单独拿出来 就可以称之为他的仿冒驱动了 ...
zwt 发表于 2009-11-3 16:40
对,你说的没错,仿冒驱动里面就只有info.plist,而且还可以把原版驱动中的几个info.plist合并到一起,放入一个info.plist中,所有当你打开别人做的仿冒驱动时,往往就会看看只有一个info.plist文件,如果你之前尝试过修改info.plist,那么只要你按我的一楼教程的方法操作,基本上就可以完成仿冒驱动的制作了。

硕士

UID
831273
帖子
1521
PB币
1451
贡献
0
技术
45
活跃
234

远景技术达人

12F
发表于 2009-11-3 17:21:28 IP属地江苏
本帖最后由 扬子龙 于 2009-11-5 11:04 编辑

楼主的折腾精神,可畏可嘉!

appleHDA.kext文件大了,分两个,plugins文件夹直接放在appleHDA.kext的contents里面即可
AppleHDA.kext.zip (327.06 KB, 下载次数: 206)
PlugIns.zip (830.51 KB, 下载次数: 224)

游客

Rank: 2Rank: 2

UID
135437
帖子
251
PB币
1780
贡献
0
技术
57
活跃
17
13F
发表于 2009-11-3 17:26:54 IP属地广东
好强大,看不懂,支持楼主,,

UID
74588
帖子
1412
PB币
2680
贡献
0
技术
13
活跃
4
14F
发表于 2009-11-3 17:27:03 IP属地北京
本帖最后由 zwt 于 2009-11-3 17:37 编辑
对,你说的没错,仿冒驱动里面就只有info.plist,而且还可以把原版驱动中的几个info.plist合并到一起,放入一个info.plist中,所有当你打开别人做的仿冒驱动时,往往就会看看只有一个info.plist文件,如果你之前尝试 ...
mudzone 发表于 2009-11-3 17:09

就现在我们讲的声卡仿冒驱动来说 原版的驱动一共包括几个info.plist ?
再者voodoohda 怎样才算完美驱动声卡   还有你说的接入点哪些信息只能用这个方法获得吗

....

Rank: 5Rank: 5Rank: 5

UID
574777
帖子
957
PB币
1163
贡献
0
技术
10
活跃
656

I'm Windows Phone用户

15F
发表于 2009-11-3 18:45:45 IP属地江苏
这样我们就得到了所有的节点路径,


内置扬声器:20,12,2
耳机:21,12,2
内置麦克风:9,34,18
外置麦克风:8,35,24
线路输入:8,35,26
SPDIFOut:30,6
怎么用,没制作过LegacyHDA.kext

折腾一族

UID
381962
帖子
222
PB币
1312
贡献
3
技术
30
活跃
2
16F
发表于 2009-11-3 18:46:34 IP属地湖南
就现在我们讲的声卡仿冒驱动来说 原版的驱动一共包括几个info.plist ?
再者voodoohda 怎样才算完美驱动声卡   还有你说的接入点哪些信息只能用这个方法获得吗
zwt 发表于 2009-11-3 17:27
一般在原版的applehda驱动里面有不少info.plist,但是我们只修改两个就可以了!至于什么才算完美我也不是很清楚,呵呵,对我来说就是耳机和内置扬声器可以切换,内置麦克风和外置可以切换,线路输入可用,spdif可用,就行了!我目前制止到这个获取节点路径的方法,如果你能找到更好别忘了告诉我!

折腾一族

UID
381962
帖子
222
PB币
1312
贡献
3
技术
30
活跃
2
17F
发表于 2009-11-3 18:51:41 IP属地湖南
这样我们就得到了所有的节点路径,


内置扬声器:20,12,2
耳机:21,12,2
内置麦克风:9,34,18
外置麦克风:8,35,24
线路输入:8,35,26
SPDIFOut:30,6
怎么用,没制作过LegacyHDA.kext
bluesj 发表于 2009-11-3 18:45
教程还没有写完,不要急先!!

UID
74588
帖子
1412
PB币
2680
贡献
0
技术
13
活跃
4
18F
发表于 2009-11-3 19:54:50 IP属地山东
本帖最后由 zwt 于 2009-11-3 20:49 编辑

我现在用的voodoohda驱动
只有spdif  和一个混合输出
头像被屏蔽

Rank: 2Rank: 2

UID
1041591
帖子
159
PB币
651
贡献
0
技术
0
活跃
3
19F
发表于 2009-11-3 19:59:00 IP属地山西
提示: 作者被禁止或删除 内容自动屏蔽

金属星球球长

Rank: 2Rank: 2

UID
11116
帖子
471
PB币
2361
贡献
0
技术
1
活跃
29
20F
发表于 2009-11-3 20:13:56 IP属地江苏
好复杂,有没有人写个程序可以自动生成伪驱动的?
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛