共用方式為


公開 Hardware-Accelerated 擷取效果

在 Windows XP 和更新版本中,WDM 音訊架構支援透過 DirectSound 公開音訊擷取效果的硬體加速。 這些效果包括聲場回音取消(AEC)和噪音抑制(NS)。 如需了解 DirectSoundCapture 應用程式如何啟用硬體加速的 AEC(自動迴音消除)和 NS(噪音抑制)的資訊,請參閱 Microsoft Windows SDK 文件。

迷你埠驅動程式可以根據基礎裝置的功能,針對這些效果的任何子集公開硬體加速。 若要揭露硬體對於 AEC 和 NS 效果的功能,驅動程式所實作的 AEC 濾波器上每個針腳都應該符合下列需求:

以下是公開硬體加速 AEC 和 NS 節點的特定需求。

聲場回音取消

PCM 迷你埠驅動程式會以符合此額外需求之擷取和轉譯數據流的拓撲形式,公開 AEC 的硬體支援:

雜訊抑制

PCM 迷你埠驅動程式會以符合此額外需求的擷取數據流拓撲形式公開 NS 的硬體支援:

  • 引腳必須包含 NS 節點(KSNODETYPE_NOISE_SUPPRESS),該節點必須在排序的節點鏈中正確位置指定(詳情請參閱下方)。

Node-Chain 排序

目前,DirectSound 擷取效果架構需要以應用程式要求節點的順序來指定節點。 因此,迷你埠驅動程式指定其節點的順序必須符合 AEC 系統篩選 條件所使用的順序(Aec.sys),這會在軟體中實作 AEC 和 NS 演算法。

若要啟用硬體加速,驅動程式必須依照下列順序指定硬體所實作的效果:

KSNODETYPE_ADC

KSNODETYPE_ACOUSTIC_ECHO_CANCEL

KSNODETYPE_NOISE_SUPPRESS

請注意,只要保留相對順序,此列表就可以省略任何未實作的效果。

AEC 節點針腳指派

配接器驅動程式會使用 PCCONNECTION_DESCRIPTOR 結構的陣列來指定篩選內的連接。 每個陣列元素都會描述一個連線,可以是節點對節點、節點對接或針腳接腳。 如需詳細資訊,請參閱 節點和連線

若要使用PCCONNECTION_DESCRIPTOR結構,驅動程式開發人員會將「邏輯」接腳指派至節點。 這些是節點本身的「接腳」,僅用於指定濾波器內部的連接。 這與濾波器上的外部針腳形成鮮明對比,這些接腳是用來連線到其他濾波器的。

下表顯示轉接器驅動程式應指派給 AEC 節點上四個邏輯針腳的針腳識別碼。

Pin ID 參數名稱 價值 意義

KSNODEPIN_AEC_RENDER_IN

1

用於渲染資料流的節點輸入端口

KSNODEPIN_AEC_RENDER_OUT

0

渲染串流的來源接腳(節點輸出)

KSNODEPIN_AEC_CAPTURE_IN

2

擷取數據流的接收針腳(節點輸入)

KSNODEPIN_AEC_CAPTURE_OUT

3

擷取資料流的來源釘選 (節點輸出)

上表中的引腳 ID 定義於頭檔 Ksmedia.h 中。

下列程式代碼範例示範配接器驅動程式如何指定 AEC 篩選的內部拓撲,其中包含 AEC 節點和 NS 節點:

    // AEC Filter Topology

    // Pin IDs for external pins on AEC filter
    #define ID_CaptureOutPin   0   // microphone stream
    #define ID_CaptureInPin    1
    #define ID_RenderOutPin    2   // speaker stream
    #define ID_RenderInPin     3

    // Generic pin IDs for simple node with one input and one output
    #define NODE_INPUT_PIN     1
    #define NODE_OUTPUT_PIN    0

    // Node IDs
    #define NODE_ID_AEC        0   // acoustic echo cancellation
    #define NODE_ID_NS         1   // noise suppression

    // The array below defines the internal topology of an
    // AEC filter that contains an AEC node and an NS node.

    const PCCONNECTION_DESCRIPTOR AecConnections[] = {
        { PCFILTER_NODE, ID_RenderInPin,       NODE_ID_AEC,    KSNODEPIN_AEC_RENDER_IN  },
        { NODE_ID_AEC,   KSNODEPIN_AEC_RENDER_OUT,   PCFILTER_NODE,  ID_RenderOutPin    },
        { PCFILTER_NODE, ID_CaptureInPin,      NODE_ID_AEC,    KSNODEPIN_AEC_CAPTURE_IN },
        { NODE_ID_AEC,   KSNODEPIN_AEC_CAPTURE_OUT,  NODE_ID_NS,     NODE_INPUT_PIN     },
        { NODE_ID_NS,    NODE_OUTPUT_PIN,      PCFILTER_NODE,  ID_CaptureOutPin   }
    };

上述程式代碼範例中的 AecConnections 陣列會定義下圖所示的篩選條件拓撲。

圖表說明具有 AEC 和 NS 節點之 AEC 篩選器的內部拓撲。

上圖顯示過濾器內每個連接,使用指向數據流方向的虛線箭頭。 圖中總共會出現五個連線。 每個連接都會對應至程式代碼範例中 AecConnections 陣列中五個元素的其中一個。