驱动级别的底层音频流输出系统

       最近看了些有关驱动方面的资料,尤其是音频类的,总之一句话,网上的相关资料太少了!可能是因为这个比较难,涉足的人少之又少!

       所谓“驱动级别的底层音频流输出系统”,既是指直接和系统基本声卡驱动模型建立通道,绕过操作系统的管理,有点类似于声卡的WDM辅助驱动!比如有名的ASIO!这样做的目的是可以有效的降低延迟,通过这个系统输出的音频流不会受到操作系统的干预,不会进入操作系统的多媒体缓冲区不会被操作系统混音,可以完全保证输出流的质量,音量的控制也是基于声卡的硬音量(即操作系统的Master音量),在本输出系统工作时其他任何程序将无权访问声卡(即驱动独占模式)!Vista及Windows7有单独的一套优于WinXP的音频WDM模型,实现起来要比WinXP容易,所以使用平台暂定为Windows Vista和Windows7!为了方便其他程序调用,本系统初步计划将不采用驱动模式(以驱动级别来访问声卡驱动, 但本身不属于驱动,或者不提供驱动接口)!

       初步设想的整体构架1是,当有程序调用本系统时,本系统和声卡驱动直接建立连接,获取声卡驱动的流缓冲池,将地址交给客户程序,客户程序向本系统输入流属性,系统针对目标声卡的物理特性计算必要的物理量变换(比如流是96Hz的采样率,而声卡只能支持48Hz,所以要进行重采样),然后对客户程序设定事件回调,当客户需要回放时,将流数据填入前面给定的缓冲区,声卡即开始回放,同时系统做流信息统计。

       初步设想的整体构架2是,当有程序调用本系统时,本系统和声卡驱动直接建立连接,获取中断地址,并创建客户要求大小的缓冲区,客户程序向本系统输入流属性,系统针对目标声卡的物理特性计算必要的物理量变换(比如流是96Hz的采样率,而声卡只能支持48Hz,所以要进行重采样),然后对客户程序设定事件回调,当客户程序需要回放时,将流数据填入系统创建的缓冲区,向系统发出回放指令,当系统缓冲区满时系统会调用声卡驱动中断,将缓冲区内的数据灌入声卡!

 

Copyright(C) 2008-2011 ViPER520 Powered By 5uCMS
苏ICP备11042445号