Windows下Core Audio APIS 音訊應用開發(五)
之前做開發是一直有個疑問(博主qq,1204802552,歡迎交流)
按照Core Audio上面的文件,音訊裝置本身會有個裝置週期,這個週期決定了音訊裝置所能快取的最大資料量;而另外一方面,我們在初始化Core Audio 音訊管理物件的時候,也可以設定一個週期,這個是指延時週期(不太明白。。。)。之前一直沒在意這個,後來在做音訊採集是,發現這兩個時間異常重要,一旦我們設定的延時週期大於裝置週期一定範圍時,採集出來的資料就會出現丟幀的現象,這個我們可以直接拿window官方的採集例子程式做實驗,當我們增大設定的延時週期時,就會出現這種現象,所以我們要根據裝置週期來設定我們的延時週期。
下面是獲得裝置週期的程式碼,在官方自帶的例子程式中能找到,但是沒有用上而已。
UINT32 CWASAPICapture::BufferSizePerPeriod()
{
REFERENCE_TIME defaultDevicePeriod, minimumDevicePeriod;
HRESULT hr = _AudioClient->GetDevicePeriod(&defaultDevicePeriod, &minimumDevicePeriod);
if (FAILED(hr))
{
WriteLog(hr, "Unable to retrieve device period: %x\n");
return 0;
}
double devicePeriodInSeconds = defaultDevicePeriod / (10000.0*1000.0);
return devicePeriodInSeconds*1000;//這裡返回的就是我們需要的時間
}
// Get Device Period
LONG _devicePeriodInMilSeconds = BufferSizePerPeriod();
//判斷
if (_devicePeriodInMilSeconds>EngineLatency)
{
_EngineLatencyInMS = EngineLatency;
}else
{
_EngineLatencyInMS = _devicePeriodInMilSeconds;
}
ps:以上內容僅供參考,如有錯誤,歡迎大家指教,共同進步