- Il exécute efficacement les fonctions audio couramment utilisées au moyen de blocs matériels à fonction fixe : XMA, convertisseur de fréquence d’échantillonnage (SRC), égaliseur et compression, et filtre-volume
- Il fournit un processeur de contrôle audio (ACP) intégré et programmable pour contrôler ces blocs
- Un processus d’accès direct à la mémoire (DMA) pour accéder à la mémoire système
- Une mémoire interne spéciale, appelée mémoires tampons de mixage Une mémoire tampon de mixage est un bloc de mémoire qui stocke une trame audio complète de données. Le matériel SHAPE lit généralement à partir d’une ou deux mémoires tampons de mixage et écrit dans une mémoire tampon de mixage de sortie. Il existe quelques exceptions à ce processus général, comme le décodage XMA et les blocs DMA et SRC.
XAudio2 et les intergiciels audio implémentent implicitement les composants SHAPE. Toutefois, la construction de graphes de flux offre la plus grande souplesse et l’accès aux capacités d’accélération audio de la console XBOX One.
Cette rubrique présente une vue d’ensemble du matériel SHAPE et des blocs fonctionnels.
- Flux de contrôle
- DMA
- XMA
- PCM
- Bloc convertisseur de fréquence d’échantillonnage (SRC)
- Égalisation et compression
- Bloc filtre-volume (FLTVOL)
- Mémoires tampons de mixage
- Dépassement, magnitude et saturation
- Files d’attente SHAPE
- Considérations relatives à la programmation
Flux de contrôle
Voici un flux de contrôle typique pour le traitement audio.- Un fichier de données audio XMA compressé est chargé dans la mémoire système principale.
- Le bloc décodeur XMA décode une partie des données XMA en données PCM (Pulse Code Modulation). La sortie est stockée dans une mémoire tampon de décodage XMA dans la mémoire système.
- Le bloc SRC lit les échantillons PCM à partir de la mémoire tampon de décodage XMA et effectue la conversion de la fréquence d’échantillonnage et la transposition de hauteur nécessaires. Cela permet d’amener des données audio d’une fréquence d’échantillonnage arbitraire dans les blocs d’accélération SHAPE. Le bloc SRC envoie les données audio, à la fréquence fixe de 48 KHz, vers une mémoire tampon de mixage interne.
- Tout traitement SHAPE supplémentaire, ainsi que la lecture et l’écriture dans des mémoires tampons de mixage temporaires, est maintenant effectué. Le traitement est contrôlé par l’ACP, lui-même piloté par l’application au moyen de l’API ACP décrite dans cet ensemble de documentation. Le traitement comprend l’égalisation, la compression, la mise à l’échelle du filtre et la mise à l’échelle du volume.
- La dernière étape, appelée accumulation de la sortie des haut-parleurs, est celle où les mémoires tampons de mixage des haut-parleurs recueillent et mixent les échantillons de plusieurs sources sonores pour la lecture. Des effets audio globaux facultatifs peuvent être traités à cette étape.
- Un fichier de données audio XMA compressé est chargé dans la mémoire système principale.
- Le bloc décodeur XMA décode une partie des données XMA en données PCM et stocke la sortie dans une mémoire tampon de décodage XMA dans la mémoire système.
- Le bloc SRC lit les échantillons PCM à partir de la mémoire tampon de décodage XMA et effectue la conversion de la fréquence d’échantillonnage et la transposition de hauteur nécessaires. Cela permet d’amener des données audio d’une fréquence d’échantillonnage arbitraire dans les blocs d’accélération SHAPE. Le bloc SRC envoie les données audio, à la fréquence fixe de 48 KHz, vers une mémoire tampon de mixage interne.
- À cette étape, le flux du processus diverge. Le système DMA est utilisé pour transférer une ou plusieurs mémoires tampons de mixage vers la mémoire système principale.
- Le processeur de l’application effectue tout traitement du signal requis sur la mémoire tampon en mémoire principale.
- Le système DMA est utilisé pour transférer les données audio traitées de la mémoire tampon en mémoire principale vers une mémoire tampon de mixage temporaire. Après cette étape, le processus est identique à celui décrit précédemment.
- Tout traitement SHAPE supplémentaire, ainsi que la lecture et l’écriture dans des mémoires tampons de mixage temporaires, est maintenant effectué. Le traitement est contrôlé par l’ACP, lui-même piloté par l’application au moyen de l’API ACP décrite dans cet ensemble de documentation. Le traitement comprend l’égalisation, la compression, la mise à l’échelle du filtre et la mise à l’échelle du volume.
- La dernière étape, l’accumulation de la sortie des haut-parleurs, est celle où les mémoires tampons de mixage des haut-parleurs recueillent et mixent les échantillons de plusieurs sources sonores pour la lecture. Des effets audio globaux facultatifs peuvent être traités à cette étape.

DMA
Le système d’accès direct à la mémoire (DMA) prend en charge les fonctionnalités de lecture et d’écriture avec conversion automatique de virgule flottante en entier et d’entier en virgule flottante. Le système DMA utilise des mémoires tampons circulaires qui contiennent des échantillons désentrelacés en blocs de 128 échantillons. Le processeur DMA permet au moteur SHAPE d’envoyer des données des mémoires tampons de mixage vers la mémoire système principale et de récupérer des données de la mémoire système principale dans les mémoires tampons de mixage pour un traitement ultérieur. Le DMA est effectué par bloc. Une trame audio de données est transférée à la fois. Pour faciliter les données entrelacées par bloc, une valeur de saut indique le nombre de blocs de trames audio en mémoire système à sauter (à partir de l’adresse de base) lors de la lecture ou de l’écriture des échantillons. Pour cette raison, les flux multicanaux nécessitent un contexte DMA par canal. Les échantillons de données audio sont toujours lus et écrits sous forme de valeurs de 32 bits, soit en entiers, soit en virgule flottante, selon l’indicateurFloatConvert du contexte DMA. Pour aider à réduire la bande passante de données, la direction du DMA (lecture ou écriture) est indiquée dans la commande DMA plutôt que dans le contexte DMA. Le moteur DMA n’effectue aucun traitement du signal, mais peut convertir des valeurs à virgule flottante en entiers et des entiers en valeurs à virgule flottante. Cela permet au processeur de l’application de traiter les échantillons de données en format à virgule flottante.
Pour calculer la taille d’une mémoire tampon DMA, utilisez la formule suivante.

XMA
Le format XMA prend en charge le son mono, stéréo et multicanal entrelacé, avec des débits binaires et une compression variables. Plusieurs améliorations ont été apportées par rapport à l’implémentation XMA de la XBOX 360, notamment une augmentation de la fréquence d’horloge (avec, par exemple, une amélioration de 40 % des capacités de transposition de hauteur) et une augmentation du nombre de voix de 320 à 512. Le bloc décodeur XMA décode une partie des données XMA en mémoire principale et retourne les données PCM dans une mémoire tampon de décodage XMA en mémoire principale. Le bloc décodeur XMA est identique à celui de la XBOX 360, à l’exception d’améliorations mineures liées à l’état pour l’interfaçage avec les autres composants SHAPE. Le bloc de registres du décodeur XMA a été enrichi des informations d’état liées à la sortie décodée de chaque voix. Cinq bits par contexte XMA indiquent la quantité de données audio non consommées restant dans la mémoire tampon de sortie PCM. Ces registres sont implémentés à l’intérieur du bloc décodeur XMA. Ils sont ainsi toujours disponibles pour déterminer s’il y a suffisamment d’échantillons pour verrouiller le contexte du SRC sans lire la mémoire principale.xWMA n’est pas pris en charge par SHAPE, mais l’est au moyen de
XAudio2.PCM
La modulation par impulsions codées (PCM) linéaire prend en charge jusqu’au son ambiophonique 7.1 à 48 KHz. L’ACP effectuera un mixage réducteur si le système audio de l’utilisateur est, par exemple, en son ambiophonique 5.1 ou en stéréo. La sortie S/PDIF sera prise en charge. La prise en charge est également offerte pour les mémoires tampons PCM linéaires et circulaires qui contiennent des entiers mono ou stéréo de 16 bits, des valeurs à virgule flottante mono de 32 bits ou des entiers mono de 32 bits (24 bits justifiés à gauche, ou 32 bits avec les 8 bits inférieurs masqués).Bloc convertisseur de fréquence d’échantillonnage (SRC)
Le bloc SRC effectue une conversion de la fréquence d’échantillonnage basée sur des entiers et écrit les données de sortie dans les mémoires tampons de mixage. Le SRC est généralement utilisé pour l’émulation d’instruments de musique, la conversion d’échantillons d’entrée à une octave plus basse ou plus haute que celle de la source, et pour l’effet Doppler et d’autres effets. À partir de la mémoire système, le bloc SRC lit soit des données PCM à virgule flottante de 32 bits, soit des données à virgule fixe de 16, 24 ou 32 bits. Comme données d’entrée, le bloc peut prendre soit la sortie du décodeur matériel XMA, soit les données gérées par le logiciel. Comme il est étroitement intégré au décodeur XMA, le bloc SRC peut déterminer si le nombre d’échantillons de données PCM décodées dans la mémoire tampon de décodage XMA est suffisant pour créer et compléter une trame audio d’échantillons sans lire la mémoire principale. Le SRC fonctionne en mode mono ou stéréo. Les données PCM sont lues à partir de la mémoire et converties dans un format commun à virgule fixe de 24 bits pour la conversion de la fréquence d’échantillonnage. La sortie est écrite dans une ou deux mémoires tampons de mixage, selon le mode. Les données stéréo sont stockées en mémoire sous forme d’un flux entrelacé de données de 16 bits. Le canal gauche se trouve dans les 16 bits les moins significatifs de chaque mot de 32 bits, et le canal droit dans les 16 bits les plus significatifs. De plus, en mode stéréo, les données PCM sont lues et désentrelacées simultanément. Les données du canal gauche (échantillons 0,2,4,6…) sont traitées et envoyées vers une mémoire tampon de mixage. Les données du canal droit (échantillons 1,3,5,7…) sont écrites dans une deuxième mémoire tampon de mixage. La figure 3 présente les modes de conversion de la fréquence d’échantillonnage. Figure 3. Modes de conversion de la fréquence d’échantillonnage.
Égalisation et compression
Le compresseur limite la plage dynamique du signal en surveillant le niveau d’entrée et en créant une valeur de gain dynamique. Le compresseur utilise ensuite la valeur de gain comme multiplicateur du signal, en le mettant à l’échelle de façon appropriée selon le niveau actuel du signal d’entrée. Autrement dit, le compresseur est un contrôle de volume automatique qui surveille constamment le signal d’entrée et s’ajuste en conséquence. Le compresseur agit uniquement sur les signaux qui dépassent un seuil précis. Les signaux sous le seuil passent sans être modifiés. Le seuil est défini par l’application dans les données de contexte EQComp. Un contrôle programmable dans le contexte sert à effectuer la compression ou l’expansion. Le compresseur modifie les données sonores selon un paramètre qui indique le rapport entre le niveau entrant et le niveau sortant. Le rapport représente l’ampleur de l’atténuation à appliquer au signal entrant s’il dépasse le seuil. Voici des exemples.- À 2:1, pour chaque 2 dB au-dessus du seuil, le compresseur produit 1 dB au-dessus du niveau de seuil.
- À 1:1, le compresseur est essentiellement désactivé.

attack et release indiquent la rapidité avec laquelle le compresseur est activé, c’est-à-dire le temps nécessaire pour atténuer complètement, de la quantité définie par le rapport, les sons qui dépassent le seuil. Attack et release sont exprimés en millisecondes et correspondent à la rapidité avec laquelle le compresseur doit faire varier le gain de sortie en réponse à un signal qui dépasse le seuil ou qui passe sous celui-ci. Ces ajustements peuvent être linéaires ou logarithmiques.
Le diagramme suivant (figure 5) montre que le niveau de sortie souhaité n’est atteint qu’une fois que l’entrée a dépassé le seuil pendant la durée définie par attack. Le diagramme montre également que l’entrée et la sortie ne reviennent à l’unité qu’une fois que l’entrée est sous le seuil pendant la durée définie par release.
Figure 5. La synchronisation attaque/relâchement.

RMS. En mode normal, le niveau d’entrée est instantané et calculé pour chaque échantillon. En mode RMS, une moyenne mobile (une approximation de la valeur RMS) est maintenue sur les 128 échantillons précédents. La moyenne mobile est utilisée comme niveau d’entrée plutôt que le niveau absolu de l’échantillon d’entrée actuel.
Le bloc EQ/Compresseur-Expanseur contient deux unités de traitement distinctes en série : un égaliseur programmable à trois bandes et un compresseur de plage dynamique (figure 6). Le bloc sert à contrôler la fréquence et la plage dynamique des sons, et il prend son entrée à partir d’une ou deux mémoires tampons de mixage.
- Une entrée est le signal audio à traiter.
- La deuxième entrée, appelée sidechain, est le signal de contrôle facultatif utilisé pour déterminer la compression audio.

-
En mode normal (figure 7), il y a une seule entrée audio provenant d’une mémoire tampon de mixage. L’entrée passe par l’égaliseur, puis elle est traitée par le compresseur et envoyée vers une mémoire tampon de mixage.
Figure 7. Mode normal.

-
En mode interne (figure 8), le signal d’entrée est envoyé directement à l’entrée audio du compresseur, puis il est divisé et envoyé à l’égaliseur. De l’égaliseur, il est envoyé à l’entrée sidechain du compresseur.
Figure 8. Mode interne.

-
En mode externe (figure 9), deux signaux d’entrée distincts provenant de deux mémoires tampons de mixage distinctes sont utilisés. Le signal d’entrée passe par l’égaliseur et arrive à l’entrée audio du bloc de compression. Le signal d’entrée sidechain est envoyé directement à l’entrée sidechain du compresseur.
Figure 9. Mode externe.

Bloc filtre-volume (FLTVOL)
FLTVOL sert à effectuer les opérations suivantes :- Modéliser l’occlusion des sons qui contournent ou traversent un objet
- Répartir l’énergie du son sur plusieurs haut-parleurs, afin de modéliser la direction d’arrivée du son.
f et q sont calculés par le logiciel à l’extérieur du bloc SHAPE. Lorsqu’un coefficient est mis à jour, il évolue progressivement vers la nouvelle valeur au cours d’une trame audio. Des bits de contrôle déterminent quelle sortie (coupe-bande, passe-haut, passe-bande ou passe-bas) doit être utilisée comme sortie finale du bloc FLTVOL.
Les données de contexte de chaque canal ou flux sont stockées dans la mémoire système. Bien que les performances soient limitées à 2560 flux simultanés à 48 KHz (ce qui signifie que SHAPE peut traiter jusqu’à 2560 contextes FLTVOL par trame audio), le nombre de contextes adressables en mémoire est plus élevé, afin de simplifier les scénarios de réutilisation de flux.
Le comportement du filtrage est conçu pour être identique à celui de XAudio2.
Mémoires tampons de mixage
Les mémoires tampons de mixage ont trois fonctions principales.- Les mémoires tampons de mixage servent de destination de mixage finale pour chaque sortie de haut-parleur du système (ou d’un joueur individuel). Lorsque chaque son est traité, sa sortie est ensuite mixée dans ces mémoires tampons.
- Les mémoires tampons de mixage servent d’emplacements de stockage temporaires lorsque des mémoires tampons de données audio sont transmises entre les blocs matériels.
- Conjointement avec le moteur DMA, les mémoires tampons de mixage servent de mécanisme pour transmettre des données du matériel SHAPE et du sous-système audio vers le système principal ainsi que pour transmettre des données de la mémoire système principale vers le matériel SHAPE et le sous-système audio.
Dépassement, magnitude et saturation
Dans le moteur audio d’un titre, la gestion de la marge peut être très difficile. Pour cette raison, chaque bloc SHAPE conserve l’état associé à la marge du signal et au gain. Chaque bloc autre que le SRC conserve un indicateur qui signale si une saturation interne s’est produite pendant le traitement. En plus de l’indicateur de saturation interne, chaque bloc matériel conserve également deux nombres de quatre bits qui représentent la magnitude de la sortie du bloc matériel. La magnitude est calculée en déterminant la sortie de crête pendant la trame audio et en comptant les zéros de tête de la valeur absolue de la crête. Un nombre de quatre bits conserve la magnitude de crête persistante, et l’autre est réinitialisé par le matériel à chaque trame audio. En plus de la surveillance de la magnitude de crête de chaque bloc matériel individuel, la magnitude de crête des mémoires tampons de mixage est également conservée. Lorsque la sortie d’un bloc matériel est ajoutée à une mémoire tampon de mixage, la magnitude de crête est calculée de la même manière, en comptant les zéros de tête. L’état de chaque bloc matériel conserve une paire supplémentaire de valeurs de magnitude de crête de quatre bits. Ces valeurs représentent la magnitude de crête de la mémoire tampon de mixage après l’accumulation de la sortie du bloc matériel dans celle-ci. Un nombre de quatre bits représente la magnitude de crête continue et persistante. L’autre est mis à jour à chaque trame audio. Les valeurs de magnitude de crête sont enregistrées dans le contexte des blocs SHAPE, même si ce qu’elles représentent est l’état de la mémoire tampon de mixage. La magnitude de crête est encodée selon le tableau suivant (codé dans le fichier ShapeHardwareContexts.h).
Pour aider à gérer la marge et à éviter le dépassement et la saturation, en plus des réglages de gain précis, un décalage vers la droite de 0 à 7 bits peut être appliqué à la sortie d’un bloc matériel avant l’accumulation dans la mémoire tampon de mixage de sortie. Ce décalage est indiqué dans le contexte de chaque bloc matériel SHAPE.
Files d’attente SHAPE
Le processeur audio SHAPE gère deux files d’attente qui aident à réduire les verrouillages entre le matériel du système et le matériel de l’application.- La file d’attente de commande et de contrôle (CCQ) sert à donner au processeur audio SHAPE une série de commandes à exécuter dès qu’il le peut, généralement lorsqu’il termine le traitement de la trame audio actuelle. La liste d’exécution SHAPE est lue une fois pour chaque sortie de trame audio. Toutefois, la CCQ ne sera lue et exécutée qu’une seule fois. La CCQ est le mécanisme qui permet au processeur de mettre à jour les données de contexte de n’importe quel bloc à la limite d’une trame audio, sans nécessiter de verrouillage matériel avec le matériel SHAPE. Il peut s’agir, par exemple, de fournir davantage de données de flux binaire pour le bloc XMA, de mettre à jour les paramètres de contexte de divers blocs ou de pointer vers une nouvelle liste d’exécution. Cela se fait habituellement pendant que le graphe de flux de traitement audio est modifié.
- La file d’attente d’état et de rapport (SRQ) est utilisée par le processeur audio SHAPE pour signaler au processeur divers événements qui ne nécessitent pas de réponse en temps réel. Par exemple, la mise à jour de la consommation de la mémoire tampon de flux binaire, les erreurs, les avertissements et indicateurs, les données de débogage, les données de performance et les informations d’état.
Considérations relatives à la programmation
La programmation directe du matériel SHAPE est possible au moyen de l’interfaceIACPHAL. Toutefois, le processus de préparation des données audio pour le matériel SHAPE est complexe. De nombreuses méthodes, structures et énumérations utilitaires sont fournies. Ces utilitaires fournissent toutes les méthodes nécessaires, ou la plupart d’entre elles, pour contrôler le matériel SHAPE. Le Microsoft Game Development Kit (GDK) inclut le code source de ces utilitaires pour les rares cas où il est nécessaire de modifier le code afin de traiter certains types de données.
Le seul fichier d’en-tête à inclure explicitement dans votre projet est acphal.h, qui fait référence à tous les fichiers d’en-tête utilitaires. Toutes les fonctions utilitaires font référence à la macro NO_SHAPE_CONTEXT_VALIDATION. Si cette macro est définie, toutes les validations seront omises. Cela sera utile pour les versions finales destinées à la vente.
Pour plus de détails sur le partage des ressources SHAPE et XMA avec des instances de XAudio2, consultez la section Remarques de la fonction XAudio2Create.
Pour plus de détails sur toutes les méthodes utilitaires, consultez la Vue d’ensemble de l’ACP.
Graphes de flux persistants et non persistants
Vous pouvez soumettre des graphes de flux à traiter en mode persistant ou non persistant. Les graphes de flux persistants sont traités et demeurent résidents, de sorte que leur traitement est répété à la trame suivante, une fois que les pointeurs de lecture et d’écriture ont avancé et que les autres informations de contexte ont été mises à jour. Utilisez des graphes de flux persistants dans l’un ou l’autre des scénarios suivants.- Graphes de flux très complexes, qui nécessitent beaucoup de traitement par le processeur pour être réassemblés à chaque trame
- Graphes de flux très statiques, qui ont le même nombre et la même configuration de voix pendant une période prolongée
- Les topologies de voix changent fréquemment.
- La cadence de traitement du moteur logiciel audio de votre titre est dissociée du matériel SHAPE; autrement dit, elle n’est pas un multiple de 2,667 ms.
- Vous souhaitez exécuter le traitement audio plus rapidement qu’en temps réel, en soumettant des graphes à consommer dès qu’ils sont disponibles.
Problèmes de débogage
Lorsque vous développez des graphes de flux, l’inscription aux messages vous aidera à déboguer les problèmes qui pourraient survenir. Plus précisément, utilisez le paramètreNumMessages de Connect. Le système de messagerie fournit une rétroaction détaillée sur divers problèmes, notamment les graphes de flux non valides (ACP_FLOWGRAPH_TERMINATED_REASON_INVALID_GRAPH), les commandes bloquées et les dépassements de trame causés lorsque vous tentez d’effectuer plus de traitement que ne le permet la taille de trame matérielle de 2,667 ms. Avant de livrer un titre, vérifiez que le traitement des graphes de flux réussit de façon constante en observant les messages ACP_MESSAGE_TYPE_FLOWGRAPH_COMPLETED pour chaque graphe de flux soumis.
Messages manqués
Si vous utilisez les messages ACP pour piloter l’état du moteur et que vous traitez de nombreux messages, vous devriez examiner le champdroppedMessageCount de ACP_MESSAGE pendant le développement. Une valeur non nulle de ce champ indique que la file d’attente des messages était pleine et que des messages ont dû être abandonnés. Dans ce scénario, envisagez de traiter la file d’attente plus rapidement et de l’agrandir.
Dépassements de trame
Il existe de nombreuses raisons pour lesquelles un graphe de flux pourrait ne pas être terminé avant la fin d’une trame audio (2,667 ms), par exemple le traitement d’un trop grand nombre de graphes de flux ou le traitement d’un graphe de flux mal structuré. Ce graphe de flux incomplet entraînera un messageACP_FLOWGRAPH_TERMINATED_TIME_EXCEEDED pour les graphes de flux persistants, et ces graphes de flux persistants seront incomplets. En revanche, un graphe de flux non persistant n’est pas soumis à cette contrainte et s’exécutera jusqu’à ce qu’il soit terminé, même sur plusieurs trames.
Commandes bloquées
Les commandes SRC et DMA peuvent être signalées comme bloquées (ACP_MESSAGE_TYPE_SRC_BLOCKED, ACP_MESSAGE_TYPE_DMA_BLOCKED) dans plusieurs scénarios, comme le montre le tableau suivant.
| Type de commande| Scénario de blocage|
| --- | --- | --- | --- |
| XMA SRC| Le contexte XMA associé présente une erreur d’analyse ou n’a aucune donnée source. L’erreur est SHAPE_XMA_ERROR_STATUS_READ_BUFFER_INVALID_VALIDBUFFER_CURRBUF_IS_0 | SHAPE_XMA_ERROR_STATUS_FRAME_CROSSES_BOUNDARY_INTO_INVALID_READ_BUFFER_VALIDBUFFER_CURRBUF_IS_0 | SHAPE_XMA_ERROR_STATUS_FRAME_CROSSES_BOTH_READ_BUFFER_BOUNDARIES. XMA SRC ne bloquera pas en raison d’un manque de données décodées.|
| PCM SRC| Le contexte PCM associé est SHAPE_PCM_MODE_CIRCULAR, et il n’y a aucune donnée source.|
| Lecture (DMA à partir d’une mémoire tampon de mixage)| La mémoire tampon DMA est pleine.|
| Écriture (DMA vers une mémoire tampon de mixage)| La mémoire tampon DMA est vide.|
Une fois que des commandes sont déterminées comme bloquées (ce qui se produit à la fois avant leur ajout à une file d’attente SHAPE pour traitement et au moment de l’exécution), elles sont retirées du graphe, ce qui peut entraîner une perte audio. Pendant le développement, examinez d’abord les commandes bloquées pour trouver des améliorations dans la gestion des graphes de flux. De plus, avant la livraison, assurez-vous que votre titre empêche complètement le blocage des commandes.
Vous pouvez empêcher le blocage des commandes DMA en vous assurant que votre mémoire tampon audio est suffisamment grande et que les données sont diffusées à intervalles réguliers par rapport à la taille de la mémoire tampon. Par exemple, si vous diffusez quatre trames matérielles à la fois, assurez-vous qu’un multiple de ces trames (au moins en double mémoire tampon, soit huit) se trouve dans la mémoire tampon afin que le matériel puisse écrire en avance sur le pointeur de lecture du titre. Vous pouvez aussi imposer le vidage de la mémoire tampon avant de soumettre le graphe de flux suivant : consommer, mettre à jour le pointeur de lecture DMA, puis soumettre le graphe de flux.
Les commandes SRC ont trois modes.
SHAPE_SRC_COMMAND_TYPE_STARTest utilisé pour presque toutes les commandes SRC d’un graphe de flux. Effectuez un traitement normal et attendez-vous à ce que d’autres données audio suivent le graphe de flux actuel.SHAPE_SRC_COMMAND_TYPE_STOP_IMMEDIATEsert à arrêter immédiatement le traitement des données XMA ou PCM source. Le SRC produira une mémoire tampon remplie de zéros pour cette trame.SHAPE_SRC_COMMAND_TYPE_STOP_ENDsert à indiquer le dernier paquet d’une voix.
STOP_END ou STOP_IMMEDIATE, la commande SRC ne sera pas terminée, ce qui bloquera le graphe de flux actif. Un graphe de flux persistant se terminera à la fin de la trame audio, et un graphe de flux non persistant ne sera jamais terminé.
Problèmes de synchronisation
Des problèmes de synchronisation peuvent survenir si vous ne respectez pas les pratiques de consommation des contextes et des commandes du matériel SHAPE. Bien que vos titres conservent un accès complet à la mémoire allouée par l’ACP, veillez à ne pas modifier une structure de contexte pendant qu’elle est utilisée. Vous pouvez utiliser SubmitCommand pour soumettre des commandes à exécuter à une trame précise, au début de la trame suivante ou dès que possible.Le scénario « dès que possible » demeure asynchrone par rapport à tout traitement du processeur par le titre. Certaines commandes peuvent ne pas être terminées immédiatement, par exemple si un contexte est au milieu d’une opération non interruptible. Attendez un message
ACP_MESSAGE_TYPE_COMMAND_COMPLETED pour vérifier qu’une commande a bien été traitée.