Skip to main content

XDspSubmitCommandWithEnvelope

Soumet une commande à la file d’attente matérielle pour un flux XDSP donné. Cette API est semblable à XDspSubmitCommand, qui soumet une commande au matériel, à ceci près qu’elle accepte un paramètre supplémentaire, envelopeBuffer, qui contient une valeur de gain pour chaque bloc du filtre de réponse impulsionnelle. Ces valeurs de gain sont appliquées à la réponse impulsionnelle pendant la convolution.
Lorsque l’utilisation d’une enveloppe est souhaitée, cette API doit être appelée avec un pointeur valide vers la mémoire tampon d’enveloppe. Il incombe à l’appelant de s’assurer que la mémoire tampon d’enveloppe reste valide jusqu’à ce qu’elle ne soit plus nécessaire. Pour cesser d’utiliser l’enveloppe, utilisez XDspSubmitCommand ou XDspSubmitCommandWithEnvelope avec nullptr pour envelopeBuffer. Cette API ne doit être utilisée que pour un flux activé pour XDspProcessType::Convolution.

Syntaxe

Paramètres

handle   _In_
Type : XDspStreamHandle
Handle de flux XDSP valide. command   _In_
Type : XDspCommand*
Pointeur vers une structure XDspCommand. envelopeBuffer   _In_
Type : float*
Pointeur vers les valeurs de gain de chaque bloc du filtre de réponse impulsionnelle à appliquer pendant la convolution.
Cette mémoire tampon doit faire partie de la mémoire inscrite par XDspConnect ou XDspConnectWithMaximumStreamLimit et doit être alignée sur 16 octets. Cette mémoire tampon est utilisée par le matériel et ne peut être ni modifiée ni libérée tant que toutes les commandes qui l’utilisent ne sont pas terminées et que les réponses n’ont pas été récupérées. Le nombre de valeurs de gain dans la mémoire tampon d’enveloppe doit être au moins égal au nombre de blocs du filtre de réponse impulsionnelle ; il se calcule comme suit.
uint32_t IRLengthInComplexValues = XDspActivationParameters::impulseResponseLengthInFloats/2;
uint32_t IRLengthInBlocks = IRLengthInComplexValues/ XDspActivationParameters::blockFrameCount;
uint32_t envelopeSize = ((IRLengthInBlocks * sizeof(float) + 15) & ~(0xF)) / sizeof(float);
Cette mémoire tampon suit la taille de la réponse impulsionnelle. Pour une réponse impulsionnelle stéréo, les valeurs de gain de tout le canal gauche sont suivies des valeurs de gain de tout le canal droit, de la même manière que la réponse impulsionnelle du canal gauche est suivie de celle du canal droit. Pour une réponse impulsionnelle mono, les mêmes valeurs de gain sont appliquées aux canaux gauche et droit d’un signal d’entrée stéréo. La taille minimale de cette mémoire tampon doit être de 8 valeurs float dans le cas d’un filtre de réponse impulsionnelle mono et de 16 valeurs float dans le cas d’un filtre de réponse impulsionnelle stéréo. commandSequence   _Out_
Type : uint32_t*
Pointeur vers un uint32_t destiné à renvoyer une valeur de séquence de commande. Pour plus de détails, consultez la section Remarques.

Valeur renvoyée

Type : HRESULT Si la méthode réussit, elle renvoie S_OK. Si la méthode échoue, elle renvoie le code suivant (liste partielle) :

Remarques

Cet appel est rapide, car il n’alloue pas de ressources et ne traite pas de données ; il se contente d’envoyer la commande au serveur matériel. Le processus de convolution comporte ‘n’ étapes et l’enveloppe ne peut être changée, activée ou désactivée qu’à la première étape. Cela signifie que l’effet de l’enveloppe peut ne pas être immédiat et être retardé de quelques soumissions. Pour désactiver les paramètres d’enveloppe, appelez XDspSubmitCommand ou XDspSubmitCommandWithEnvelope avec un envelopeBuffer null. Cet appel accepte également un pointeur vers un uint32_t pour renvoyer une valeur de séquence de commande, commandSequence, qui permet de savoir ultérieurement quand le résultat de la commande est prêt. Ce nombre représente le nombre total de commandes soumises avec succès depuis le début de la session et après l’appel de XDspActivate. Ce nombre vaut un pour la première commande et est incrémenté de un pour chaque appel réussi à XDspSubmitCommandWithEnvelope ou à XDspSubmitCommand par la suite. Si le serveur matériel est dans un état incorrect, XDspSubmitCommandWithEnvelope renvoie le code d’erreur XDSP_E_DEVICE_FATAL_ERROR. À ce stade, plus aucune commande ne peut être soumise pour le flux XDSP en état d’échec. XDspStatus pour ce flux indiquera également la même erreur. Le flux XDSP concerné doit attendre que toutes les commandes soumises soient traitées par le matériel en vérifiant XDspStatus, puis il doit être désactivé à l’aide de XDspDeactivate une fois toutes les commandes traitées. Les autres flux XDSP ne sont pas affectés et le matériel continue de traiter leurs commandes.

Configuration requise

En-tête : XDspAudio.h Bibliothèque : Chad.lib Plateformes prises en charge : XBOX Series X|S

Documentation conceptuelle

Voir aussi

XDSP
XdspSubmitCommand
Erreurs XDSP
Vue d’ensemble d’une convolution sur un seul flux à l’aide de l’API XDSP
Vue d’ensemble d’une convolution avec enveloppe sur un seul flux à l’aide de l’API XDSP Vue d’ensemble d’une FFT/IFFT sur un seul flux à l’aide de l’API XDSP
Last modified on October 6, 2026