|
|
音频接口:: V8 d* `& f* b! z" _
kX驱动至少支持5种音频接口:/ N) Y g6 k2 A1 p" k% J
-WinMM( n7 F) |3 Z& `8 d4 \3 P
-DirectSound3 v* F+ p3 h3 b+ X
-Kernel Streaming
4 B @# o- A. z( \$ b! a7 i-ASIO( t# s$ ]9 l) R
-GSIF
2 m+ ~, N6 W8 k# U; A8 y每种音频接口都有其自身的限制和特性,有些是系统本身支持的音频接口,另一些则是基于硬件支持的。. b) r1 o" H/ D4 }7 _
- w3 Z9 s: e1 D! k8 x# e
Kernel Streaming接口被Cakewalk/Sonar,foobar2000等软件所采用,此接口将音频数据直接送至驱动而绕过系统音频处理层,这样可以确认声卡工作在指定的模式下,然而,当特定的格式不被支持的时候,就会有错误产生,"Wave 0/1"设备可以硬件支持的格式为:16bit,100~191999Hz。任何输入信号都会被自动(硬件)重采样至16bit/48kHz格式,由于软件重采样可以提供更好的音质,我们推荐你将播放器的输出设为16bit/48kHz并使用软件重采样。2 U$ o+ @( K' G# v
% j5 ^: T$ e" _8 i对于原生24bit/96kHz的回放(Audigy2系列),唯一被硬件支持的格式是"24bit padded to 32bit"(有时也被称为"Alt 24bit")。如果播放器支持的话,尽量使用该格式;换句话说,p16v硬件本身(当然,也包括驱动)不支持"真正的"24bit回放(即每个采样占用3字节的音频模式)。由于很多播放器并不支持24-32bit的音频格式,最新的kX驱动可以兼容"32bit"模式,当然,因为硬件本身并不真正支持32bit回放,驱动只会使用32bit中的前24bit。
2 T0 j" S. t7 c# U. Q, o* }% D. d3 b
p16v芯片仅支持24bit/96kHz,24bit/48kHz,24bit/44.1kHz以及24bit/192kHz四种格式,在Kernel Streaming模式下,任何其他的采样率将直接被拒绝。注意:44.1kHz的支持还在试验阶段,在某些声卡上可能会产生错误的讯号。
- W- A" }* I/ v! G4 _9 I* g0 |2 D& r6 M1 S
WinMM接口是Windows默认的音频接口,绝大多数软件将其作为默认输出方式,这个接口可以同时被几个应用程序所调用,因此它的功能较为复杂。默认情况下,kX驱动将WinMM的工作模式设定为16bit/48kHz(Wave 0/1)以及24bit/96kHz(Wave HQ),应用程序可以更改输出采样率,前提是当前只有该程序使用WinMM接口。否则,KMixer会将多条音频流混合&重采样。& Y& w6 Y, B3 A) X2 o* M
1 V4 Z: `8 l) Y8 |/ a4 u
24bit/96kHz硬件同时只能支持一条音频流(需要注意的是,音频流可以是多声道的——即,你可以输出一条立体声音频流或者一条7.1声道音频流,但是2条立体声音频流就不行了)。
( b; }$ Y+ J3 {8 C# \
3 s4 X5 w. A+ K/ }9 AWinMM接口会自动对硬件不支持的音频流进行格式转换,记住这个转换由KMixer完成,而不是kX驱动,这在特定的情况下会出问题,例如:用"Wave 0/1"设备回放24bit音频,KMixer的转换会产生额外的噪音(尝试播放一段数字静音的信号,然后观察peak表——当然,别忘了先禁用混响)。" }% T" W; z) w$ Z' H8 j4 q/ Q
3 k% A5 s# P7 E2 d' j: {
DirectSound接口不仅可以独立工作,更被用于作WinMM和Kernel Streaming之间的转换层。
9 t/ c4 W" E# o* b0 W! F+ k
1 X" l: c) o J, k7 A% f2 h3 Q+ C8 |根据微软的技术文档所述,WinMM/DirectSound子系统会自动分配"最佳"的音频流并将格式设为最高可支持的模式,当这个音频流被分配之后,它将同时被用于WinMM回放和DirectSound软件缓冲。由于"Wave 0/1"最高可支持的格式为16bit/191.999kHz,为了避免WinMM默认工作在16bit/191.999kHz下(音频信号将被软/硬件反复重采样),kX驱动将其默认格式设成16bit/48kHz。6 J# i5 e8 p0 ~' Y% W: r4 n
8 M7 I/ M8 _3 L, D* j$ K3 `
大部分DirectSound应用程序会自己分配额外的音频流作为实际使用的播放通道,而KMixer/WinMM初始分配的音频流将被闲置,这些音频流将被设置成需要的采样率以提高性能及使用硬件加速的采样率转换。" k" C( M, Z( B$ S! Q
8 [; \& x) ?/ B% d* X( Q" Y6 i ~也就是说,当用WinMM接口回放的时候,实际采样率取决于程序设定以及其他任何基于WinMM/DirectSound的(后台)程序,如果当前只有一个程序访问硬件,那么动态的硬件采样率转换是可行的;如果此时还有额外的DirectSound/WinMM程序运行,最终WinMM采样率将有可能是16bit/48kHz(其余所有的WinMM/DirectSound(软件混合)音频流都将被重采样至16bit/48kHz)。
9 H7 x$ ^# L& ]* a; u$ f9 K5 v; r, r; L
*最新的kX驱动会强制所有"Wave x/x"的WinMM音频流工作在16bit/48kHz下,动态硬件采样率转换依然可以在DirectSound模式下工作(除非指定软件缓冲),即,如果你使用WinMM来回放音频,牢记:改变采样率将会使用KMixer的转换算法而不是硬件转换!- K9 P3 O( P- t+ e
" r& C$ z5 R: f! |! F8 c& L6 U2 e1 C
这个操作方法在"Wave 0/1"设备下工作正常,但是在"Wave HQ"设备下会有问题。( x7 C# u% t5 O
8 m! o$ y& J- ^" t( N; K
由于"p16v"硬件不支持多个独立的音频流,驱动将会报告KMixer当前仅有一个音频流可用,这时情况就会逆转:由于DirectSound无法分配额外的音频流,它会使用初始分配的音频流用于所有的音频回放,而音频数据将被送入KMixer(然后被重采样以及格式转换)。
6 g% ?8 J' D8 y3 K( A
1 l9 M C8 X9 RkX驱动允许WinMM接口更改"Wave HQ"设备的采样率(44.1,48,96或192kHz)。也就是说,任何WinMM音频流(如果它是当前唯一访问"Wave HQ"设备的音频流话)将可以利用硬件采样率转换,而任何DirectSound程序的格式都会被KMixer转换成24bit/96kHz。' t. e$ F; `2 C& Q7 u) {
" z j' c. B a. r
目前还没有变通的办法可以解决该问题,所以当你配置你的音频程序的时候,请注意这个特性。
( f; O' A! u! x3 ^1 T6 u( Q& O8 c; E* x/ E1 d8 I( k" S
任何情况下,音频流的真实格式以及采样率的信息可以用debug工具获得。! x9 c6 ~" w5 k, [) j0 P- W
$ f( u! {- A- R# U" k
ASIO和GSIF接口目前工作于16bit/48kHz上(ASIO也可以支持16bit/44.1kHz,但仅限回放)。以后将会有一个单独的ASIO驱动支持24bit/96kHz回放和录音(当然,仅限Audigy2系列)。 |
|