Delen via


Opname-effecten van Hardware-Accelerated weergeven

In Windows XP en hoger ondersteunt het WDM-audioframework hardwareversnelling van audio-opname-effecten die beschikbaar worden gesteld via DirectSound. Deze effecten omvatten akoestische echo-annulering (AEC) en ruisonderdrukking (NS). Zie de Microsoft Windows SDK-documentatie voor informatie over hoe een DirectSoundCapture-toepassing het gebruik van hardware-versnelde AEC en NS mogelijk maakt.

Een minipoortstuurprogramma kan hardwareversnelling beschikbaar maken voor elke subset van deze effecten, afhankelijk van de mogelijkheden van het onderliggende apparaat. Als u de mogelijkheden van de hardware voor AEC- en NS-effecten beschikbaar wilt maken, moet elke speld op het AEC-filter dat door het stuurprogramma wordt geïmplementeerd, voldoen aan deze vereisten:

Hieronder ziet u de specifieke vereisten voor het beschikbaar maken van hardware-versnelde AEC- en NS-knooppunten.

Akoestische echo-annulering

Een PCM-minipoortstuurprogramma biedt hardwareondersteuning voor AEC in de vorm van een topologie voor zowel de capture- als renderstreams die aan deze aanvullende vereiste voldoen:

  • De pincode moet een AEC-knooppunt (KSNODETYPE_ACOUSTIC_ECHO_CANCEL) bevatten, dat moet worden opgegeven in de juiste positie in de geordende knooppuntketen (zie hieronder).

Ruisonderdrukking

Een PCM-minipoortstuurprogramma biedt hardwareondersteuning voor NS in de vorm van een topologie voor de capture-stroom die voldoet aan deze aanvullende vereiste:

  • De pincode moet een NS-knooppunt (KSNODETYPE_NOISE_SUPPRESS) bevatten, dat moet worden opgegeven in de juiste positie in de geordende knooppuntketen (zie hieronder).

Node-Chain Bestelling

Op dit moment vereist de DirectSound-capture-effects-architectuur dat de knooppunten worden opgegeven in de volgorde waarin ze door de toepassing worden aangevraagd. Als gevolg hiervan moet de volgorde waarin het minipoortstuurprogramma de knooppunten specificeert overeenkomen met de volgorde die wordt gebruikt door het AEC-systeemfilter (Aec.sys), waarmee de AEC- en NS-algoritmen in software worden geïmplementeerd.

Als u hardwareversnelling wilt inschakelen, moet het stuurprogramma de effecten opgeven die door de hardware in de volgende volgorde worden geïmplementeerd:

KSNODETYPE_ADC

KSNODETYPE_ACOUSTIC_ECHO_CANCEL

KSNODETYPE_NOISE_SUPPRESS

Houd er rekening mee dat deze lijst alle niet-geïmplementeerde effecten weglaat zolang de relatieve volgorde behouden blijft.

Toewijzingen van AEC-knooppuntpinnen

Een adapterstuurprogramma maakt gebruik van een matrix van PCCONNECTION_DESCRIPTOR structuren om de verbindingen binnen een filter op te geven. Elk matrixelement beschrijft één verbinding, die knooppunt-naar-knooppunt, knooppunt-naar-pin of pin-to-pin kan zijn. Zie Knooppunten en verbindingen voor meer informatie.

Als u de PCCONNECTION_DESCRIPTOR structuur wilt gebruiken, wijst de schrijver van het stuurprogramma 'logische' pinnen toe aan knooppunten. Dit zijn 'pinnen' op de knooppunten zelf en worden alleen gebruikt om de verbindingen in het filter op te geven. Dit is in tegenstelling tot de externe pinnen op het filter, die worden gebruikt om verbinding te maken met andere filters.

In de volgende tabel ziet u de pincode-id's die het adapterstuurprogramma moet toewijzen aan de vier logische pinnen op het AEC-knooppunt.

Parameternaam van Pin-ID Waarde Betekenis

KSNODEPIN_AEC_RENDER_IN

1

Sinkpin (knooppuntinvoer) voor renderstream

KSNODEPIN_AEC_RENDER_OUT

0

Bronpincode (knooppuntuitvoer) voor renderstream

KSNODEPIN_AEC_CAPTURE_IN

2

Sinkpin (knooppuntinvoer) voor capture stream

KSNODEPIN_AEC_CAPTURE_OUT

3

Bronpincode (knooppuntuitvoer) voor opnamestroom

De pincode-id's in de voorgaande tabel worden gedefinieerd in het headerbestand Ksmedia.h.

In het volgende codevoorbeeld ziet u hoe een adapterstuurprogramma de interne topologie van een AEC-filter kan opgeven dat zowel een AEC-knooppunt als een NS-knooppunt bevat:

    // 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   }
    };

De AecConnections-matrix in het voorgaande codevoorbeeld definieert de filtertopologie die wordt weergegeven in de volgende afbeelding.

Diagram met de interne topologie van een AEC-filter met AEC- en NS-knooppunten.

De voorgaande afbeelding vertegenwoordigt elke verbinding in het filter met een stippellijn die verwijst in de richting van de gegevensstroom. In totaal worden er vijf verbindingen weergegeven in de afbeelding. Elke verbinding komt overeen met een van de vijf elementen in de AecConnections-matrix in het codevoorbeeld.