- Il exécute efficacement les fonctions audio couramment utilisées à l’aide 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 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. Cependant, la construction de graphes de flux offre la plus grande flexibilité et l’accès aux capacités d’accélération audio de la console XBOX One.
Cette rubrique fournit une vue d’ensemble du matériel SHAPE et des blocs fonctionnels.
- Flux de contrôle
- DMA
- XMA
- PCM
- Bloc de 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 en mémoire système.
- Le bloc SRC lit les échantillons PCM dans la mémoire tampon de décodage XMA et effectue la conversion de fréquence d’échantillonnage et le décalage de hauteur tonale nécessaires. Cela permet d’introduire dans les blocs d’accélération SHAPE des données audio ayant une fréquence d’échantillonnage arbitraire. Le bloc SRC envoie des 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 via 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 collectent 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, en stockant la sortie dans une mémoire tampon de décodage XMA en mémoire système.
- Le bloc SRC lit les échantillons PCM dans la mémoire tampon de décodage XMA et effectue la conversion de fréquence d’échantillonnage et le décalage de hauteur tonale nécessaires. Cela permet d’introduire dans les blocs d’accélération SHAPE des données audio ayant une fréquence d’échantillonnage arbitraire. Le bloc SRC envoie des 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 via 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 collectent 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 la lecture/écriture avec conversion automatique des valeurs flottantes en entiers et des entiers en valeurs flottantes. Le système DMA utilise des mémoires tampons circulaires qui contiennent des échantillons désentrelacés par 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. La DMA s’effectue par bloc. Une trame audio de données est transférée à la fois. Pour faciliter l’utilisation de données entrelacées par blocs, une valeur de saut spécifie le nombre de blocs de trames audio en mémoire système à ignorer (à partir de l’adresse de base) lors de la lecture ou de l’écriture des échantillons. C’est pourquoi 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 32 bits, entières ou flottantes, comme spécifié dans l’indicateurFloatConvert du contexte DMA. Pour aider à réduire la bande passante des données, la direction de la DMA (lecture ou écriture) est spécifiée dans la commande DMA plutôt que dans le contexte DMA. Le moteur DMA n’effectue aucun traitement du signal, mais peut convertir les valeurs flottantes en entiers et les entiers en valeurs flottantes. Cela permet au processeur de l’application de traiter les échantillons de données au 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 décalage de hauteur tonale) 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 renvoie les données PCM vers 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 de quelques 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 spécifient 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 pour le SRC sans lire la mémoire principale.xWMA n’est pas pris en charge par SHAPE, mais il est pris en charge via
XAudio2.PCM
Le PCM (Pulse Code Modulation) linéaire prend en charge jusqu’au son surround 7.1 à 48 KHz. L’ACP effectue un mixage réducteur si le système audio de l’utilisateur est, par exemple, en son surround 5.1 ou en stéréo. La sortie S/PDIF sera prise en charge. Les mémoires tampons PCM linéaires et circulaires contenant des entiers 16 bits mono ou stéréo, des valeurs flottantes 32 bits mono ou des entiers 32 bits mono (24 bits justifiés à gauche, ou 32 bits avec les 8 bits de poids faible masqués) sont également prises en charge.Bloc de convertisseur de fréquence d’échantillonnage (SRC)
Le bloc SRC effectue une conversion de 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 bas ou plus haut que la source, ainsi que 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 32 bits, soit des données à virgule fixe 16, 24 ou 32 bits. Comme données d’entrée, le bloc peut utiliser la sortie du décodeur matériel XMA ou 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 en mémoire et converties dans un format commun à virgule fixe 24 bits pour la conversion de 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 de flux entrelacé de données 16 bits. Le canal gauche se trouve dans les 16 bits de poids faible de chaque mot de 32 bits, et le canal droit dans les 16 bits de poids fort. En mode stéréo, les données PCM sont également 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 seconde mémoire tampon de mixage. La figure 3 présente les modes de conversion de fréquence d’échantillonnage. Figure 3. Modes de conversion de 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 cette valeur de gain comme multiplicateur du signal, en le mettant à l’échelle de manière appropriée en fonction du niveau actuel du signal d’entrée. En d’autres termes, le compresseur est un contrôle automatique du volume qui surveille en permanence le signal d’entrée et s’ajuste en conséquence. Le compresseur n’agit que sur les signaux qui dépassent un seuil spécifique. Les signaux inférieurs au seuil passent sans modification. Le seuil est défini par l’application dans les données de contexte EQComp. Un contrôle programmable dans le contexte permet d’effectuer une compression ou une expansion. Le compresseur modifie les données sonores en fonction d’un paramètre qui spécifie le rapport entre le niveau entrant et le niveau sortant. Ce 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 tranche de 2 dB au-dessus du seuil, le compresseur produit 1 dB au-dessus du niveau du seuil.
- À 1:1, le compresseur est pratiquement désactivé.

attack et release spécifient la rapidité d’activation du compresseur, c’est-à-dire le temps nécessaire pour atténuer complètement, de la quantité spécifiée par le rapport, les sons qui dépassent le seuil. Attack et release sont spécifié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 repasse en dessous. 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 spécifiée 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 restée sous le seuil pendant la durée spécifiée par release.
Figure 5. Le minutage attack/release.

RMS. En mode normal, le niveau d’entrée est instantané et calculé pour chaque échantillon. En mode RMS, une moyenne glissante (une approximation de la valeur RMS) est calculée sur les 128 échantillons précédents. Cette moyenne glissante est utilisée comme niveau d’entrée au lieu du 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 reçoit son entrée d’une ou deux mémoires tampons de mixage.
- Une entrée est le signal audio à traiter.
- La seconde 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 existe une seule entrée audio provenant d’une mémoire tampon de mixage. L’entrée passe par l’égaliseur, puis 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, puis entre dans 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 permet d’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 en dehors 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 permettent de déterminer 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 en 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 remplissent 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 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. C’est pourquoi chaque bloc SHAPE conserve l’état associé à la marge du signal et au gain. Chaque bloc autre que SRC gère 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 gère é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 crête de sortie pendant la trame audio et en comptant les zéros de tête de la valeur absolue de cette crête. L’un des nombres de quatre bits contient 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, 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 cette mémoire tampon. L’un des nombres de quatre bits représente la magnitude de crête persistante en cours. 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 elles représentent 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 les dépassements et la saturation, en plus des réglages de gain précis, un décalage à droite de 0 à 7 bits peut être appliqué à la sortie d’un bloc matériel avant son 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 contribuent à réduire les verrouillages entre le matériel système et le matériel de l’application.- La file d’attente de commandes et de contrôle (CCQ) sert à fournir 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 trame audio produite. En revanche, la CCQ n’est 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 s’agit par exemple de fournir davantage de données de flux binaire au bloc XMA, de mettre à jour les paramètres de contexte de différents blocs et de pointer vers une nouvelle liste d’exécution. Cela se fait généralement pendant la modification du graphe de flux de traitement audio.
- 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. Il s’agit par exemple de la mise à jour de la consommation de la mémoire tampon de flux binaire, des erreurs, avertissements et indicateurs, des données de débogage, des données de performances et des informations d’état.
Considérations relatives à la programmation
La programmation directe du matériel SHAPE est possible via l’interfaceIACPHAL. Cependant, 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 la totalité ou la plupart des méthodes nécessaires 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 gérer certains types de données.
Le seul fichier d’en-tête à inclure explicitement dans votre projet est acphal.h, qui référence tous les fichiers d’en-tête utilitaires. Toutes les fonctions utilitaires référencent la macro NO_SHAPE_CONTEXT_VALIDATION. Si cette macro est définie, toutes les validations sont omises. Cela est utile pour les builds commerciales finales.
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 restent 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 pour l’un des scénarios suivants.- Graphes de flux très complexes, qui nécessitent un traitement processeur important pour être réassemblés à chaque trame
- Graphes de flux très statiques, qui conservent 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 indépendante du matériel SHAPE, c’est-à-dire qu’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 destinés à être consommés 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 éventuels. Plus précisément, utilisez le paramètreNumMessages de Connect. Le système de messagerie fournit des retours détaillés 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 qui se produisent lorsque vous tentez d’effectuer plus de traitement que la taille de trame matérielle de 2,667 MS ne le permet. Avant de publier un titre, vérifiez que le traitement des graphes de flux réussit systématiquement 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 devez examiner le champdroppedMessageCount de ACP_MESSAGE pendant le développement. Une valeur non nulle de ce champ indique que la file d’attente de messages était pleine et que des messages ont dû être abandonnés. Dans ce cas, envisagez de traiter la file d’attente plus rapidement et de l’agrandir.
Dépassements de trame
Un graphe de flux peut ne pas être terminé avant la fin d’une trame audio (2,667 MS) pour de nombreuses raisons, 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îne un messageACP_FLOWGRAPH_TERMINATED_TIME_EXCEEDED pour les graphes de flux persistants, et ces graphes de flux persistants restent incomplets. En revanche, un graphe de flux non persistant n’est pas soumis à cette contrainte et s’exécute jusqu’à son achèvement, 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 indiqué dans le tableau suivant.
| Type de commande| Scénario de blocage|
| --- | --- | --- | --- |
| XMA SRC| Le contexte XMA associé présente une erreur d’analyse ou ne contient 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 se bloque 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.|
| Read (DMA depuis la mémoire tampon de mixage)| La mémoire tampon DMA est pleine.|
| Write (DMA vers la mémoire tampon de mixage)| La mémoire tampon DMA est vide.|
Une fois les commandes 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 supprimées du graphe, ce qui peut entraîner une perte audio. Pendant le développement, examinez en priorité les commandes bloquées pour améliorer la gestion des graphes de flux. En outre, avant la publication, assurez-vous que votre titre empêche totalement 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 une double mise en 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 également imposer le vidage de la mémoire tampon avant de soumettre le graphe de flux suivant : consommez, mettez à jour le pointeur de lecture DMA, puis soumettez le graphe de flux.
Les commandes SRC disposent de trois modes.
SHAPE_SRC_COMMAND_TYPE_STARTest utilisé pour presque toutes les commandes SRC d’un graphe de flux. Effectue un traitement normal, en s’attendant à 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 sources XMA ou PCM. Le SRC produit 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 se termine pas, ce qui bloque le graphe de flux actif. Un graphe de flux persistant se termine à la fin de la trame audio, et un graphe de flux non persistant ne se termine jamais.
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 son utilisation. Vous pouvez utiliser SubmitCommand pour soumettre des commandes à exécuter à une trame spécifique, au début de la trame suivante ou dès que possible.Le scénario “dès que possible” reste asynchrone par rapport à tout traitement processeur du titre. Certaines commandes peuvent ne pas se terminer 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.