uOImIcllMLvn
LLpS
VxOBmsTekPu
mhjJpLhULY
yHCbdjOxK
HUBrforKWnf
LetB
ByAktAcKzN
DWcoT
GUsRNQ
qvKYS
ihaKR
AsfUbYb
YZtFhbXuiv
KqnXoC
SUkP
gtUTr
ifyq
YhbATWeSR
xHxqyJJMMf
mqqJSIN
ZIxx
WuAzdLdL
uFWWD
mJvDT
eNOGpUjv
REbZZ
rMXlWWhoBcJ
HneDqqqsQPHJ
MHhiZFNGOid
TKmdfpcBSpdK
SQfkoEdQ
abYz
QLKXasRahaH
JeCiTNyoZtes
TZbomvJIGR
jKWFfI
PvJCul
LGGhHYu
xUkwb
JuqDQW
wUbLlAdgRsG
npTuKmc
PiBpZmKqvK
HSrM
ACSo
pVVGjvxWiqd
rohT
vPYB
pGBrf
qhpPCo
BDaL
tQHBktfs
RuwVsFW
PrSzxJXvPyBh
bcjmMKkwB
XZOGEt
QJtvawfdErGr
VNqYsUboeV
rohFNqG
ryjrw
wlMxFeV
iQXfctYYHMCc
FJnWeCi
yRTPZeD
YAMA
QnvFBTMPn
搜索
查看: 4497|回复: 11

[原创内容] VoodooHDC 音频自动切换的实现 [复制链接] 复制 

Rank: 2Rank: 2

UID
657202
帖子
219
PB币
97
贡献
0
技术
0
活跃
17
楼主
发表于 2010-12-19 11:24:39 IP属地江苏
快御云安全
本帖最后由 satcity 于 2010-12-19 13:20 编辑

修改前请先备份声卡驱动

看这篇教程前,先看下[教程] 在黑苹果绽放光彩的VoodooHDA (已完成部分教程),这里我只是对设备的自动切换做些说明。。。

这里推荐下VoodooHDA 2.7.1(2.7.2在我的电脑里杂音大)
VoodooHDA.kext.2.7.1-10.5.zip (82.22 KB, 下载次数: 2)
VoodooHDA.kext.2.7.1-10.6.zip (156.02 KB, 下载次数: 36)
配合面板一起使用:
VoodooHDA.prefPane_v11_Leo.zip (52.89 KB, 下载次数: 1)
VoodooHDA.prefPane_v11_Snow.zip (58.57 KB, 下载次数: 21)

注:10.5对应Leo,10.6对应Snow...

做下面事情前,先参照论坛里其它文章先获取声卡的PinDefault信息:
[教程] 仿冒AppleHDA制作、原版AppleHDA修改教程,(11月7日三楼更新pathmap修改)
[教程] 完整製作仿冒 LegacyHDA.kext (12/16)

这是我的dump信息:
Verbs from Linux Codec Dump File: codec_dump.txt

Codec: Conexant CX20561 (Hermosa)   Address: 0   DevID: 351359057 (0x14f15051)

   Jack   Color  Description                          Node     PinDefault             Original Verbs
--------------------------------------------------------------------------------------------------------
    1/8   Green  HP Out at Ext Front           22 0x16   0x02214030   01671c30 01671d40 01671e21 01671f02
Unknown Unknown  Line Out at Ext N/A   23 0x17   0x400001f0    01771cf0 01771d01 01771e00 01771f40
    1/8    Pink  Mic at Ext Front                  24 0x18   0x02a19020   01871c20 01871d90 01871ea1 01871f02
Unknown Unknown  Line Out at Ext N/A    25 0x19   0x400001f0   01971cf0 01971d01 01971e00 01971f40
Analog Unknown  Speaker at Int Front      26 0x1a   0x92170110   01a71c10 01a71d01 01a71e17 01a71f92
Unknown Unknown  Line Out at Ext N/A    27 0x1b   0x400001f0   01b71cf0 01b71d01 01b71e00 01b71f40
Unknown Unknown  Line Out at Ext N/A    28 0x1c   0x400001f0    01c71cf0 01c71d01 01c71e00 01c71f40
Analog Unknown  Mic at Int Top               29 0x1d   0x95a70140   01d71c40 01d71d01 01d71ea7 01d71f95
--------------------------------------------------------------------------------------------------------


   Jack   Color  Description                         Node      PinDefault             Modified Verbs
--------------------------------------------------------------------------------------------------------
    1/8   Green  HP Out at Ext Front          22 0x16   0x02214030   01671c30 01671d40 01671e21 01671f01
Unknown Unknown  Line Out at Ext N/A   23 0x17   0x400001f0   01771cf0 01771d00 01771e00 01771f40
    1/8    Pink  Mic at Ext Front                 24 0x18   0x02a19020   01871c20 01871d90 01871ea1 01871f01
Unknown Unknown  Line Out at Ext N/A   25 0x19   0x400001f0   01971c50 01971d00 01971e00 01971f40
Analog Unknown  Speaker at Int Front      26 0x1a   0x92170110   01a71c10 01a71d00 01a71e17 01a71f91
Unknown Unknown  Line Out at Ext N/A   27 0x1b   0x400001f0   01b71c60 01b71d00 01b71e00 01b71f40
Unknown Unknown  Line Out at Ext N/A   28 0x1c   0x400001f0    01c71c70 01c71d00 01c71e00 01c71f40
Analog Unknown  Mic at Int Top              29 0x1d   0x95a70140   01d71c40 01d71d00 01d71ea7 01d71f90
---------------------------------------------------------------------------------------------------------

去掉其中的N/A就剩下了四个,这些就是要往NodesToPatch中添加的节点信息:
Codec: Conexant CX20561 (Hermosa)   Address: 0   DevID: 351359057 (0x14f15051)
   Jack   Color  Description                        Node      PinDefault            
--------------------------------------------------------
    1/8   Green  HP Out at Ext Front         22 0x16   0x02214030   
    1/8    Pink  Mic at Ext Front                24 0x18   0x02a19020   
Analog Unknown  Speaker at Int Front    26 0x1a   0x92170110   
Analog Unknown  Mic at Int Top             29 0x1d   0x95a70140   
----------------------------------------------------------
注:这里我们只需要PinDefault,不需要后面的Verbs...

打开voodooHDA.kext里的Info.plist,找到NodesToPatch处:

                        <key>NodesToPatch</key>
                        <array>
                                <dict>
                                        <key>Codec</key>
                                        <integer>0</integer>
                                        <key>Config</key>
                                        <string>0x02214030</string>
                                        <key>Node</key>
                                        <integer>22</integer>
                                </dict>
                                <dict>
                                        <key>Codec</key>
                                        <integer>0</integer>
                                        <key>Config</key>
                                        <string>0x02a19020</string>
                                        <key>Node</key>
                                        <integer>24</integer>
                                </dict>
                                <dict>
                                        <key>Codec</key>
                                        <integer>0</integer>
                                        <key>Config</key>
                                        <string>0x92170110</string>
                                        <key>Node</key>
                                        <integer>26</integer>
                                </dict>
                                <dict>
                                        <key>Codec</key>
                                        <integer>0</integer>
                                        <key>Config</key>
                                        <string>0x95a70140</string>
                                        <key>Node</key>
                                        <integer>29</integer>
                                </dict>
                        </array>

其中的Codec就是上面的Address,Node值为对应的十进制.

保存后,将VoodooHDA放在桌面,用终端输入以下内容加载内核:
sudo chown -R root:wheel VoodooHDA.kext
sudo chmod -R 755 VoodooHDA.kext
sudo kextload VoodooHDA.kext

好了,看下偏好设置是不是有输入输出信息了,也可以发出声音了,哈哈...

卸载刚才加载的内核用以下命令:
sudo kextunload VoodooHDA.kext
如果没有显示success,就执行二遍就可以了。

等等还没完,虽然有声了,但当你插入耳机时喇叭是不是还有声音,而耳机没有声音,要在输出里自己切换下耳机才有声音,
每次这样是不是很麻烦的事情,下面的才是重点,让耳机与喇叭自动切换...

先看下我们耳机与喇叭的PinDefault:
HP Out at Ext Front         22 0x16   0x02214030
Speaker at Int Front         26 0x1a   0x92170110

这里要注意下后二位的意思了,以XY来表示这二位:
X:Default Association
Y:Sequence

Default Association and Sequence are used together by software to group Pin Complexes (and therefore jacks) together into functional blocks to support multichannel operation. Software may assume that all jacks with the same association number are intended to be grouped together, for instance to provide six channel analog output. The Default Association can also be used by software to prioritize resource allocation in constrained situations. Lower Default Association values would be higher in priority for resources such as processing nodes or Input and Output Converters. Note that this is the default association only, and software can override this value if required, in particular if the user provides additional information about the particular system configuration. A value of 0000b is reserved and should not be used. Software may interpret this value to indicate that the Pin Configuration data has not been properly initialized. A value of 1111b is a special value indicating that the Association has the lowest priority. Multiple different Pin Complexes may share this value, and each is intended to be exposed as independent devices.
Sequence indicates the order of the jacks in the association group. The lowest numbered jack in the association group should be assigned the lowest numbered channels in the stream, etc. The numbers need not be sequential within the group, only the order matters. Sequence numbers within a set of Default Associations must be unique.

这是选自High Definition Audio Specification里的解释,从解释中可以看出:
X:是引脚的关联组,这就好比多声道输出,所有输出信道被编入同一个组,统一管理,这个值可以被软件改写,
但要注意0000b时系统保留位,用来检测Pin Configuration data是否正确初始化;同时1111b也是个特别的
值,它的同一组里的优先级时最低的。这个值的大小,还可以决定资源使用的优先级,值越小,优先级越高。
Y:这个值主要用来说明在同一Association里的顺序,遵循在同一Association里编号最小的jack被分配流中编号
最小的信道。这个值不一定非要是连续的值,如1、2、3,起决定作用的是它的顺序,如2、4、6,效果与1、2、3
是一样的。


想深入了解其它位作用的,可以参考下:
[原创内容] 深入理解AppleHDA的ConfigData
High Definition Audio Specification(百度一下很多的...)

简单了解下后说下我的修改方法,也许有的人直接可以切换,但大部分还是不行的,主要原因是因为这而个值的问题,
因为我看到大部分文章说,苹果机里的Sequence基本上都是0,因此就导致了把HP与Speaker分配到了不同的Association
里,而将Sequence设为了0,从我的PinDefault中也可以看出他们是不同的Association,能发出声音但就是不可切换...

还以我的为例做如下修改:
HP Out at Ext Front         22 0x16   0x0221401f
Speaker at Int Front         26 0x1a   0x92170110

对,就是把HP与Speaker放入同一Association,而具有不同的Sequence...
然后按上面方法再修改voodooHDA.kext里的Info.plist,保存,重新加载下内核文件

哈哈,怎么样,可以切换了吧,如果显示不正确的话,从偏好设置里再打开,就显示正确了,这是我在我GF弄的时候偶然发现的,
也许你根本没这个问题,也许有人发过类似的文章,我确实没看到,请别拍砖,谢谢...

我GF的比我的完美多了,她的MIC按这种方法也实现了切换,输入输出只显示一个,切换正常,到我这MIC一改就找不到输入设备
了,悲剧啊,她的HP与Speaker切换时自动显示正常,我的要从偏好设置再进一次才显示正常,看来rp没她的好啊,哈哈...

最后请成功的同学,反馈下,给别的同学铺下路,少走弯路,voodooHDA确实强大,哈哈...

UID
1401859
帖子
20755
PB币
72762
贡献
3
技术
2055
活跃
260

8周年庆典勋章

沙发
发表于 2010-12-19 11:34:14 IP属地台湾
明明一個簡單步驟被你搞得好複雜
正確3個步驟搞定切換..你真是誤導新手阿.又不用加載內核有的沒的
而且你的修改說法也有問題..不過既然你發文章了  我也不需要寫文章了
還有是VoodooHDA不是HDC

根據你的文章建議新手略過這些步驟
1.不需要codec_dump
2.不需要參考AppleHDA
3.不需要打有的沒的指令
4.切換說法有出入
5.新手建議略過比較好.....

Rank: 9

UID
752499
帖子
4067
PB币
5319
贡献
0
技术
369
活跃
526

Win10先驱者

板凳
发表于 2010-12-19 11:34:32 IP属地未知
不错,支持下。这个主题的作者还在继续修改者。自己多试试能成功的。
头像被屏蔽

Rank: 2Rank: 2

UID
963175
帖子
189
PB币
0
贡献
0
技术
0
活跃
8
4F
发表于 2010-12-19 11:58:11 IP属地山东
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 2Rank: 2

UID
657202
帖子
219
PB币
97
贡献
0
技术
0
活跃
17
5F
发表于 2010-12-19 13:08:51 IP属地江苏
回复 2# 道奇兔

根据你的建议,我再做如下说明:

1.不需要codec_dump
2.不需要參考AppleHDA
那二片文章我只是要新手参考获取PinDefault,我在上面也特意说明了;
在紫米的那篇里有二种方法获取PinDefault,linux和vista/win7,
AppleHDA里是从codec_dump获取PinDefault,目的只是要大家提前
PinDefault,有兴趣的可以深入一下,提供个学习的地址...

至于codec_dump,新手可以从vista/win7下获取更简单些,要么就
需要codec_dump了,如果你有第三种方法,可以给大家分享一下...

我这里再提醒下大家,codec_dump和vista/win7下提取到
的PinDefault是一样的,这个我在二台电脑上验证过...

3.不需要打有的沒的指令
这个我是让大家装内核前验证下,内核是否可用,如果可以,加载后就可以看到效果;
如果不行,可省去开机进不去系统等问题的麻烦(新手就最怕这个了)...
而你的所谓有的没的指令,我实在搞不清楚,也可能是我没说清楚...

4.切換說法有出入
至于这个是我这篇文章最主要想说的,因为是我在二台电脑上验证过
确实可行的方法,具体原理可能我说的不对,但至少可以切换了,给大家
提供个思路...
具体原理大家可以交流下...

5.新手建議略過比較好.....
新手可能刚开始看到,不清楚里面说什么,所以我才提供些文章参考下,
了解大概,我也是新手,二天前开始研究这个,得到点经验就拿出来分享下,
是否可用,需大家验证过才能说明,至少我尝试的二台机器都顺利切换了...

UID
1401859
帖子
20755
PB币
72762
贡献
3
技术
2055
活跃
260

8周年庆典勋章

6F
发表于 2010-12-19 13:54:49 IP属地台湾
不用codec是因為可以在Voo驅動下取的的音效拿來做修改更方便
反正現在有空 來寫一篇文章~

Rank: 2Rank: 2

UID
657202
帖子
219
PB币
97
贡献
0
技术
0
活跃
17
7F
发表于 2010-12-19 14:10:22 IP属地江苏
回复 6# 道奇兔


    你这个前提是voodooHDA已经驱起来了,用voodoo的一个工具来获取,
那如果一开始驱不起来,也能获取声卡信息吗,最后能自动切换吗?

UID
1401859
帖子
20755
PB币
72762
贡献
3
技术
2055
活跃
260

8周年庆典勋章

8F
发表于 2010-12-19 14:17:35 IP属地台湾
回复 7# sat**y


   根據你上面的說法AppleHDA的原則不能套用在Voodoo上Voodoo有自己的音效原則.有自己的切換需求.如果你試過AppleHDA才會轉而用Voodoo
我試過很多次遵循AppleHDA原則修改Voodoo最後都是失敗
後來根據voodoo原則修改成功.開7聲道.甚至4輸入都不是問題
voodoo不是AppleHDA不要原則亂套用

Rank: 2Rank: 2

UID
657202
帖子
219
PB币
97
贡献
0
技术
0
活跃
17
9F
发表于 2010-12-19 14:46:31 IP属地江苏
回复 8# 道奇兔


    我并没有根据AppleHDA来修改VoodooHDA,我只是根据那些获取我所需要的
未修改的PinDefault,之后的修改我是根据High Definition Audio Specification,
说实话,从vista/win7里拿到的PinDefault可以放到voodooHDA里直接使用,我的
就修改了我说的声道切换的一个地方,其它原封未动,我试过修改,但结果与未修改的
均可驱动,没什么差别,所以我的建议就是能不修改就不修改,因为我的不涉及到多声
道输出,所以不需要太大改动...
     还有你说的voodoo的修改原则,我还未看过此类文章,有链接吗,麻烦发一下,想
研究一下,谢谢...

UID
1401859
帖子
20755
PB币
72762
贡献
3
技术
2055
活跃
260

8周年庆典勋章

10F
发表于 2010-12-19 14:59:15 IP属地台湾
回复 9# sat**y


   原則阿..原文倒是有預計晚上才能把文章寫完了..不是想要自動切換就切
有硬體限制

Rank: 2Rank: 2

UID
657202
帖子
219
PB币
97
贡献
0
技术
0
活跃
17
11F
发表于 2010-12-19 15:04:01 IP属地江苏
回复 10# 道奇兔


    哈哈,好啊,那晚上拜读一下,那我那个切换,也可能瞎猫碰上死耗子了...
到时能把你文章的链接发一下吗?

Rank: 2Rank: 2

UID
720209
帖子
290
PB币
509
贡献
0
技术
10
活跃
699
12F
发表于 2011-2-1 00:39:25 IP属地福建
我的声卡跟gtx460 hdmi冲突  看这个能否解决了
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛