Asio驅動的最大特點是高速,它繞開了WDM框架,直接向硬件發送數據,最重要的是省略了KMixer步驟,這一步最費時間。此驅動開發很小衆,一般只有高端聲卡廠商纔會支持Asio驅動。
Asio驅動用戶層接口是COM接口,所以驅動開發人員也必須提供標準的COM接口。那麼,就無法繞開以下幾個函數:
DllRegisterServer
DllUnregisterServer
DllCanUnloadNow
DllGetClassObject
根據Asio的官方文檔,應用程序與Asio驅動交互如下圖:
根據這張圖,我們可以看到對於驅動最重要的幾個函數:
Init();
CreateBuffers();
Start();
Stop();
DisposeBuffers();
Exit();
現在來看看Asio官方提供的驅動開發代碼(下載地址:http://download.csdn.net/detail/u013469110/9354551)。在Asio官方例程AsioSample中,有一個AsioSample類
Class AsioSample:public IASIO, public CUnknown
AsioSample繼承了IASIO接口,我們需要在AsioSample中完成IASIO接口,即完成
Init(); //初始化
CreateBuffers(); //爲每個聲道創建雙緩衝
Start(); //啓動輸入,輸出,實現向硬件發送/接收數據
Stop(); //關閉輸入,輸出
DisposeBuffers(); //釋放CreateBuffers創建的內存
Exit(); //退出
這些函數。當然,驅動的具體細節並不僅僅只是這些函數,只是這幾個最重要,需要重點關注。