共用方式為


公開 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) ,此節點必須在已排序節點鏈結的適當位置中指定, (請參閱下方) 。

節點鏈結排序

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

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

KSNODETYPE_ADC

KSNODETYPE_ACOUSTIC_ECHO_CANCEL

KSNODETYPE_NOISE_SUPPRESS

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

AEC 節點針腳指派

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

若要使用PCCONNECTION_DESCRIPTOR結構,驅動程式寫入器會將「邏輯」針腳指派給節點。 這些是節點本身的「釘選」,而且只會用來指定篩選內的連線。 這與篩選上的外部針腳相反,用來連接到其他篩選準則。

下表顯示介面卡驅動程式應該指派給 AEC 節點上四個邏輯針腳的針腳識別碼。

釘選識別碼參數名稱 意義

KSNODEPIN_AEC_RENDER_IN

1

轉譯資料流程的接收針腳 (節點輸入)

KSNODEPIN_AEC_RENDER_OUT

0

轉譯資料流程的來源釘選 (節點輸出)

KSNODEPIN_AEC_CAPTURE_IN

2

擷取資料流程的接收針腳 (節點輸入)

KSNODEPIN_AEC_CAPTURE_OUT

3

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

上表中的針腳識別碼定義于標頭檔 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 篩選準則內部拓撲的圖表,其中包含 AEC 和 NS 節點。

上圖代表篩選內每個連接,其中含有指向資料流程方向的虛線箭號。 圖中總共會出現五個連線。 每個連接都會對應至程式碼範例中 AecConnections 陣列中五個元素的其中一個。