admin管理员组

文章数量:1534339

2024年4月3日发(作者:)

win7下DS、KS、ASIO、WASAPI输出比较(转)

转自:

/

以下先利用图表做个最简单的比较

win7下DS、KS、ASIO、WASAPI输出比较

接下来主要介绍WASAPI的来历已经微软对声音处理的发展历程:

winxp 以前的windows 一直都是使用一般DMA 来处理声音, DMA = direct

memory access, 即是一般harddisk, lan card, drives 等一切取存设备的IO 机制, i386

年代的电脑大多数都是使用PIO 来处理hdd data 出入, 即是hdd 所读所写入的任何

data 都要直接经由cpu 所控制, 才能让ram 和hdd 互传data, 但这样做便会占用大量

CPU 的loading, hdd volume 越大越快, 情况便越糟.

所以到了大概intel pentium mmx 的年代, drive controllers 便开始转用DMA, 让

晶片能简单的控制或导向hdd/drives 直接能和ram 连接, 而不需要把传送内容资料全都

要经过cpu 处理, 这样cpu 便可以完全免除对hdd 资料的负担, 即使由以前IDE/SCSI

到今天SATA 都是使用高效能的DMA, 但是DMA 的作法是要互动等待, 所有资料不只

是以ram 作为buffer 中转站, 而且是base on ram clock timer 控制传送时机, 虽然节

省电脑效能, 但相对于audio IO 来说, 这是既不稳定, 又慢又大latency, 很难还原原音的

做法, 因为声音是一种需求时间性的一种能量, 有时间构成才有声音, 而且PCM 讯号是一

种要求每一个sample 都要实时平均的到达, 才能保持原音

而DMA audio 所使用的就是一般人所说的kmixer

但是微软宣称, vista/7 已经开始弃用了kmixer 和依赖dma 的audio IO, 而开发了

他们所说的WaveRT (Wave RealTime), 他们的WASAPI, MMCSS 等就是使用WaveRT

做核心, 而WaveRT 都有一个属于自己的mixer, 但只要开动独占摸式就可以bypass 这

个mixer, mute 掉所有其他程序的声音, MMCSS 是让你提高audio 出入IO 到最高时脉

优先权, 微软想做的其实就是使用实时clock timer控制audio 流, 而不经dma, 直接和

UAA audio devices hareware 沟通, 甚至让sound card or audio interface 的

hareware clock 直接来控制audio data, 这样的作用就是想做到和ASIO 很相近

就算是WASAPI 共享模式, 都已经没有SRC 了, 而是在控制台中可以自由让你设定

共享混音后的共同目的sampling rate, bit size 及channels, 所以的可以保留原来的

44100Hz 讯号, 不会再被SRC

而且现在所有intel motherboard 或intel chips 都已经有了HPET (High Precision

Event Timer), 可以令video 和audio 的处理更实时精确处理高sampling rates, 低bus

latency, 让每秒钟内可以回应资料流事件的次数大幅增加, 但不知AMD 的有没有

/?tid=8157140&page=1#pid116989

本文标签: 声音资料处理控制共享