Skip to main content
Dans cette rubrique, nous verrons comment utiliser l’enveloppe dans le cadre d’une convolution effectuée sur les appareils XBOX Series X|S à l’aide de XDSP. Ce mécanisme a été conçu pour offrir aux développeurs une méthode souple 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 de produire 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 le signal du filtre de réponse impulsionnelle pour la case de fréquence n du bloc m : f[n,m] = f_Real[n,m] + if_Imag[n,m].
  • Soit le signal d’entrée pour la case de fréquence n du bloc m : s[n,m] = s_Real[n,m] + is_Imag[n,m].
  • Soit la valeur de gain pour un bloc de filtre m, représentée par K[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 la 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 pour 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 tout le canal gauche étant suivies des valeurs de gain de tout le canal droit. La longueur de l’enveloppe pour chaque canal doit être un multiple de 16 octets, sinon la sortie risque d’être incorrecte. Toute valeur supplémentaire découlant de l’arrondi au multiple de 16 octets le plus proche sera ignorée. 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 ê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 correspondre 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 tout le canal gauche sont suivies des valeurs de gain de tout le canal droit, de la même façon 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.

Utilisation de l’API

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

Remarques

La convolution est implémentée sous forme de processus en plusieurs étapes, et chaque paquet d’entrée passe par l’une de ces étapes. Pour que la sortie demeure fluide, l’enveloppe ne peut être activée ou désactivée qu’à la première étape. Cela signifie que l’effet d’enveloppe pourrait ne pas être désactivé ou activé immédiatement lorsque la commande est soumise. Quelques appels peuvent être nécessaires avant 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