Skip to main content
Dans cette rubrique, nous allons examiner l’utilisation de l’enveloppe dans le cadre de la convolution sur les appareils XBOX Series X|S à l’aide de XDSP. Ce mécanisme a été développé pour offrir aux développeurs une méthode flexible permettant de modifier dynamiquement une partie du filtre de réponse impulsionnelle sur le flux existant sans réactiver un nouveau flux. L’API XDspSubmitCommandWithEnvelope est fournie ; elle accepte un envelopeBuffer contenant des valeurs de gain pour chaque bloc du filtre de réponse impulsionnelle, en plus des paramètres fournis à l’API XDspSubmitCommand. Les valeurs de gain sont multipliées par les blocs correspondants du filtre de réponse impulsionnelle pendant le processus de convolution afin d’obtenir l’effet souhaité. Le filtre de réponse impulsionnelle d’origine n’est pas modifié pendant ce processus. Pour mieux comprendre le mécanisme d’enveloppe, définissons les variables suivantes dans le domaine fréquentiel :
  • Soit f[n,m] = f_Real[n,m] + if_Imag[n,m] le signal du filtre de réponse impulsionnelle pour la case de fréquence n du bloc m.
  • Soit s[n,m] = s_Real[n,m] + is_Imag[n,m] le signal d’entrée pour la case de fréquence n du bloc m.
  • Soit K[m] la valeur de gain pour un bloc de filtre m (le gain d’enveloppe pour le bloc m).
La représentation mathématique de l’enveloppe est alors la suivante : r[n,m] = K[m] * f[n,m] * s[n,m] r[n,m] = K[m] * (f_Real[n,m] + if_Imag[n,m]) * (s_Real[n,m] + is_Imag[n,m]) où r[n,m] est la sortie de convolution une fois que chaque case de fréquence et chaque bloc ont été mis à l’échelle par le gain d’enveloppe associé. Si aucun gain d’enveloppe n’est spécifié, alors K[m] = 1.0f pour tous les blocs m.

Mémoire tampon d’enveloppe

La mémoire tampon d’enveloppe contient des valeurs de gain de type float pour chaque bloc du filtre de réponse impulsionnelle à appliquer pendant la convolution. 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 pour un filtre de réponse impulsionnelle stéréo. Dans le cas d’une réponse impulsionnelle stéréo, la mémoire tampon d’enveloppe contient les valeurs de gain des deux canaux : les valeurs de gain de l’ensemble du canal gauche, suivies des valeurs de gain de l’ensemble du canal droit. La longueur d’enveloppe de chaque canal doit être un multiple de 16 octets, sinon la sortie risque d’être incorrecte. Toutes les valeurs supplémentaires résultant de l’arrondi au multiple de 16 octets le plus proche sont ignorées. Tous les pointeurs de mémoire tampon doivent être alignés sur 16 octets. 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 pas être 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 égal au nombre de blocs du filtre de réponse impulsionnelle, arrondi au multiple de 16 octets le plus proche, et se calcule comme suit.
Cette mémoire tampon suit la structure du filtre de 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 manière 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.

Utilisation de l’API

Voici un exemple de modèle d’utilisation de l’API. Consultez les remarques ci-dessous pour plus de détails.

Remarques

La convolution est implémentée sous la forme d’un processus en plusieurs étapes, et chaque paquet d’entrée passe par l’une de ces étapes. Pour que la sortie reste fluide, l’enveloppe ne peut être activée ou désactivée qu’à la première étape. Cela signifie que l’effet d’enveloppe peut ne pas être désactivé ou activé immédiatement lors de la soumission de la commande. Plusieurs appels peuvent être nécessaires pour qu’il prenne effet.

Documentation de référence de l’API

Voir aussi

Vue d’ensemble de XDSP XDspSubmitCommandWithEnvelope Vue d’ensemble d’une convolution à flux unique avec enveloppe à l’aide de l’API XDSP
Last modified on October 6, 2026