Passer au contenu principal

XDspSubmitCommandWithEnvelope

Soumet une commande à la file d’attente matérielle pour un flux XDSP donné. Cette API est semblable à XDspSubmitCommand en ce sens qu’elle soumet une commande au matériel, sauf 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 un 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 et 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 l’ensemble du canal gauche sont suivies des valeurs de gain de l’ensemble du canal droit, de la même façon que la réponse impulsionnelle du canal gauche est suivie de la réponse impulsionnelle 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 à virgule flottante dans le cas d’un filtre de réponse impulsionnelle mono et de 16 valeurs à virgule flottante dans le cas d’un filtre de réponse impulsionnelle stéréo. commandSequence   _Out_
Type : uint32_t*
Pointeur vers un uint32_t permettant de retourner une valeur de séquence de commande. Consultez la section Remarques pour plus de détails.

Valeur de retour

Type : HRESULT Si la méthode réussit, elle retourne S_OK. Si la méthode échoue, elle retourne 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 envoie simplement 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 d’enveloppe peut ne pas être immédiat et peut être retardé de quelques soumissions. Pour désactiver les paramètres d’enveloppe, appelez XDspSubmitCommand ou XDspSubmitCommandWithEnvelope avec un envelopeBuffer nul. Cet appel accepte également un pointeur vers un uint32_t pour retourner une valeur de séquence de commande, commandSequence, qui permet de savoir plus tard quand le résultat de la commande est prêt. Ce nombre représente le nombre total de commandes qui ont été 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 retourne le code d’erreur XDSP_E_DEVICE_FATAL_ERROR. À ce moment, aucune autre commande ne peut être soumise pour le flux XDSP en état d’échec. XDspStatus pour le flux indiquera également la même erreur. Le flux XDSP touché doit attendre que toutes les commandes soumises soient traitées par le matériel en vérifiant XDspStatus, et il doit être désactivé à l’aide de XDspDeactivate une fois toutes les commandes traitées. Les autres flux XDSP ne seront pas touchés et le matériel continuera 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 à flux unique à l’aide de l’API XDSP
Vue d’ensemble d’une convolution à flux unique avec enveloppe à l’aide de l’API XDSP Vue d’ensemble d’une FFT/IFFT à flux unique à l’aide de l’API XDSP
Dernière modification le 6 octobre 2026