Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
De pin moet een afzonderlijk knooppunt in de knooppuntketen bevatten om elk hardware-effect weer te geven dat in de grafiek moet worden opgenomen. De KS-knooppunttypen voor AEC- en NS-effecten worden opgegeven door de volgende GUID's: KSNODETYPE_ACOUSTIC_ECHO_CANCELKSNODETYPE_NOISE_SUPPRESS
De AEC- en NS-knooppunten op de pin moeten ondersteuning bieden voor de KSPROPSETID_General eigenschappenset en moeten informatie over de fabrikant opgeven wanneer de KSPROPERTY_GENERAL_COMPONENTID eigenschap wordt opgevraagd.
De AEC- en NS-knooppunten op de pin moeten ondersteuning bieden voor de KSPROPSETID_TopologyNode eigenschappenset en de twee specifieke eigenschappen:
KSPROPERTY_TOPOLOGYNODE_ENABLE schakelt een effect in.
KSPROPERTY_TOPOLOGYNODE_RESET het effect opnieuw instelt op de standaardstatus.
De AEC- en NS-knooppunten op de pin moeten de volgende eigenschappen van de KSPROPSETID_Audio eigenschappenset ondersteunen: KSPROPERTY_AUDIO_CPU_RESOURCESKSPROPERTY_AUDIO_ALGORITHM_INSTANCE
De pin moet de volgende eigenschappen van de KSPROPSETID_Audio-eigenschappenset ondersteunen: KSPROPERTY_AUDIO_POSITIONKSPROPERTY_AUDIO_LATENCY
De speld moet zijn gegevensbereikmogelijkheden tonen (zie Pin Data-Range en Snijpunt Eigenschappen).
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_ACOUSTIC_ECHO_CANCEL
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.
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.