首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

DirectSound 波形捕捉系列(五):捕捉緩衝區資訊查詢

     編輯:關於C++

查詢捕捉緩衝區能力、格式、狀態與當前位置

DirectSound 提供四大查詢介面,讓應用程式掌握緩衝區運行狀態與配置資訊。

1. 取得緩衝區能力 (GetCaps)

DSCBCAPS caps = { sizeof(DSCBCAPS) };
pDSCBuffer->GetCaps(&caps);
// caps.dwBufferBytes: 緩衝區總大小
// caps.dwReserved: 保留

2. 取得建立時格式 (GetFormat)

WAVEFORMATEX wfx = {};
DWORD dwWritten;
pDSCBuffer->GetFormat(&wfx, sizeof(wfx), &dwWritten);
// 注意:若 pwfxFormat 為 NULL 呼叫,dwWritten 返回所需結構大小
// 某些驅動可能返回擴充格式資訊 (cbSize > 0)

3. 取得目前狀態 (GetStatus)

DWORD dwStatus;
pDSCBuffer->GetStatus(&dwStatus);
// 旗標組合:
// DSBSTATUS_CAPTURING      - 正在捕捉
// DSBSTATUS_LOOPING        - 循環模式
// DSBSTATUS_LOCHARDWARE    - 硬體緩衝區
// DSBSTATUS_LOCSOFTWARE    - 軟體緩衝區
// DSBSTATUS_TERMINATED     - 已停止 (捕捉緩衝區專用)

4. 取得當前位置 (GetCurrentPosition)

DWORD dwCapturePos, dwReadPos;
pDSCBuffer->GetCurrentPosition(&dwCapturePos, &dwReadPos);
// dwCapturePos: 硬體正在寫入的位置 (捕捉游標)
// dwReadPos:    已完整寫入、可安全讀取的位置 (讀取游標)
// 應用程式只能讀取 dwReadPos 之前的資料

游標關係圖解

緩衝區循環:[==========|==========|==========]
                    ↑          ↑
              CapturePos  ReadPos
              (硬體寫入)   (安全讀取上限)

實務應用場景

  • GetCaps:配置對應大小的處理緩衝區
  • GetFormat:確認實際協商格式 (採樣率、位深、聲道)
  • GetStatus:監控捕捉是否正常運行、是否意外停止
  • GetCurrentPosition:計算可讀取資料量、配合通知機制處理

完整系列導覽

第五篇:資訊查詢 ← 當前 | 第六篇:通知機制 | 第七篇:特效

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved