Skip to main content
PlayFab Party est une solution de mise en réseau et de conversation vocale en temps réel. Lorsqu’il est configuré pour la conversation vocale, PlayFab Party transmet l’audio du microphone et le lit sans modification. Certains jeux ont besoin d’accéder aux mémoires tampons audio de la conversation vocale pour implémenter des effets audio personnalisés, tels que l’audio spatial ou des filtres vocaux. Ce document explique pas à pas comment utiliser la fonctionnalité de manipulation audio en temps réel pour intercepter et modifier l’audio de la conversation vocale dans PlayFab Party.

Prérequis

Cette procédure pas à pas suppose que vous êtes familiarisé avec les notions de base de la conversation vocale dans PlayFab Party.

Plateformes prises en charge

La manipulation audio en temps réel n’est pas disponible sur toutes les plateformes. Bien que les méthodes associées à la manipulation audio en temps réel soient présentes dans l’en-tête unifié multiplateforme, elles ne sont actuellement implémentées que pour Windows, XBOX et PlayStation® 5. Les méthodes renvoient des erreurs sur les autres plateformes.

Flux audio

La manipulation audio en temps réel introduit la notion de flux audio pour récupérer de l’audio depuis la bibliothèque ou lui en soumettre. Il existe deux types de flux audio. Le premier est le flux source. Un flux source permet de récupérer l’audio d’un contrôle de conversation. Chaque contrôle de conversation ne peut avoir qu’un seul flux source, appelé flux vocal. Pour un contrôle de conversation local, il sert à récupérer l’entrée du microphone ; pour un contrôle de conversation distant, il sert à récupérer l’audio vocal entrant. Si le flux vocal existe pour un contrôle de conversation, la bibliothèque redirige l’audio source de ce contrôle de conversation vers son flux vocal au lieu de traiter l’audio automatiquement. Pour un contrôle de conversation local, cela signifie que l’audio du microphone est redirigé vers le flux vocal au lieu d’être automatiquement encodé et transmis ; pour un contrôle de conversation distant, cela signifie que l’audio vocal entrant est redirigé vers le flux vocal au lieu d’être automatiquement soumis à chaque contrôle de conversation local pour être lu. Les flux source sont représentés par PartyAudioManipulationSourceStream. Le second type de flux est le flux récepteur. Un flux récepteur permet de soumettre de l’audio à un contrôle de conversation. Seuls les contrôles de conversation locaux peuvent avoir des flux récepteurs, et chacun peut en avoir deux. Ils sont appelés flux de capture et flux de rendu. Si le flux de capture existe pour un contrôle de conversation, la bibliothèque extrait l’audio du flux de capture pour l’encoder et le transmettre aux autres contrôles de conversation à la place du microphone. Si le flux de rendu existe pour un contrôle de conversation, la bibliothèque extrait l’audio du flux de rendu et le lit en plus de l’audio de la conversation vocale lu automatiquement depuis les contrôles de conversation distants. L’audio soumis au flux de capture est utilisé comme entrée de microphone du contrôle de conversation local ; l’audio soumis au flux de rendu est lu, ou « rendu », sur le périphérique de sortie audio du contrôle de conversation local. Les flux récepteurs sont représentés par PartyAudioManipulationSinkStream.

Configuration des flux audio

Par défaut, la bibliothèque gère la récupération, le transport et la lecture de l’audio. Par conséquent, les contrôles de conversation sont créés sans aucun flux audio. Vous pouvez créer un ou plusieurs flux pour un contrôle de conversation à l’aide des méthodes de configuration de flux : PartyLocalChatControl::ConfigureAudioManipulationCaptureStream(), PartyLocalChatControl::ConfigureAudioManipulationRenderStream() et PartyChatControl::ConfigureAudioManipulationVoiceStream(). Une fois configuré, un flux peut ensuite être récupéré via PartyLocalChatControl::GetAudioManipulationCaptureStream(), PartyLocalChatControl::GetAudioManipulationRenderStream() et PartyChatControl::GetAudioManipulationVoiceStream() Chaque méthode de configuration de flux vous permet de spécifier le format de l’audio que vous récupérerez depuis le flux ou que vous lui soumettrez. Pour plus d’informations sur les formats pris en charge, consultez la documentation de référence de chaque méthode de configuration de flux.

Récupération de l’audio depuis un flux source

Vous pouvez récupérer l’audio d’un flux source via PartyAudioManipulationSourceStream::GetNextBuffer(). Lorsqu’une activité vocale est détectée, une nouvelle mémoire tampon est disponible environ toutes les 40 ms. Si aucune mémoire tampon n’est disponible, l’appel réussit et fournit une mémoire tampon de longueur nulle. Le nombre total de mémoires tampons disponibles à un instant donné peut être récupéré via PartyAudioManipulationSourceStream::GetAvailableBufferCount(). Par souci d’efficacité, GetNextBuffer() fournit une mémoire tampon qui pointe vers la mémoire de la bibliothèque au lieu de copier la mémoire tampon entière. Elle peut éventuellement être modifiée sur place. Une fois le traitement d’une mémoire tampon terminé, vous devez la libérer via PartyAudioManipulationSourceStream::ReturnBuffer() afin que la bibliothèque puisse récupérer sa mémoire. Plusieurs mémoires tampons peuvent être récupérées avant qu’aucune ne soit rendue, et les mémoires tampons n’ont pas besoin d’être rendues dans l’ordre dans lequel elles ont été récupérées.

Soumettre de l’audio à un flux récepteur

Vous pouvez soumettre de l’audio à un flux récepteur via PartyAudioManipulationSinkStream::SubmitBuffer(). La mémoire tampon est copiée par la bibliothèque et peut être libérée immédiatement une fois l’appel terminé. Toutes les 40 ms, la bibliothèque consomme 40 ms d’audio soumis au flux récepteur. Pour éviter les coupures audio, l’audio doit être soumis à un rythme constant.

Scénarios

Manipulation de l’audio du microphone, ou manipulation des mémoires tampons avant encodage

La manipulation de l’audio du microphone consiste à intercepter et à modifier l’audio du microphone avant qu’il ne soit transmis aux autres contrôles de conversation. On parle parfois de « manipulation des mémoires tampons avant encodage », car l’audio du microphone est modifié avant d’être encodé et transmis aux autres contrôles de conversation. Si vous souhaitez implémenter ce scénario pour un contrôle de conversation local, configurez d’abord un flux vocal et un flux de capture pour ce contrôle de conversation local. Une fois la configuration effectuée, une fonction appelée à chaque cycle d’un thread audio dédié pour traiter l’audio du microphone de ce seul contrôle de conversation pourrait ressembler à ceci.

Manipulation de l’audio distant, ou manipulation des mémoires tampons après décodage

La manipulation de l’audio distant consiste à intercepter et à modifier l’audio entrant avant qu’il ne soit rendu sur chaque contrôle de conversation local. On parle parfois de « manipulation des mémoires tampons après décodage », car l’audio entrant est modifié après avoir été décodé, mais avant d’être rendu. Si vous souhaitez implémenter ce scénario, configurez d’abord le flux vocal de chaque contrôle de conversation distant et le flux de rendu de chaque contrôle de conversation local. Ensuite, à chaque cycle, votre thread audio doit extraire l’audio de chaque flux vocal, mixer l’audio en un seul flux en appliquant éventuellement des effets, puis soumettre la mémoire tampon mixée à chaque flux de rendu. Selon le scénario de votre jeu, vous devrez peut-être mixer les mémoires tampons dans des flux différents pour chaque contrôle de conversation local. Une fonction appelée à chaque cycle d’un thread audio dédié pour traiter l’audio vocal entrant pourrait ressembler à ceci.

Considérations relatives à la confidentialité et au mixage

La bibliothèque fournit l’audio via le flux vocal d’un contrôle de conversation distant tant que ce contrôle de conversation distant génère de l’audio et que les configurations d’autorisations de conversation et de sourdine permettent la lecture de l’audio par au moins un contrôle de conversation local. Si l’audio doit être lu pour un contrôle de conversation local mais pas pour un autre, vous devez l’omettre du mixage audio de ce dernier.

Considérations relatives aux indicateurs de conversation

La configuration d’un flux vocal pour un contrôle de conversation distant n’a aucune incidence sur son indicateur de conversation. Vous devrez peut-être implémenter une logique permettant de concilier les différences entre l’indicateur de conversation et votre logique de mixage afin de choisir le bon indicateur dans l’interface utilisateur. Par exemple, l’indicateur de conversation peut indiquer que le contrôle de conversation est en train de parler alors que votre logique de mixage personnalisée choisit de supprimer l’audio.

Scénarios mixtes

Dans certains scénarios, vous pouvez souhaiter activer la manipulation audio pour certains contrôles de conversation mais pas pour d’autres. Par exemple, vous voulez peut-être appliquer des effets aux joueurs adverses rencontrés au cours d’une partie, mais pas aux joueurs de la même équipe. Dans un tel scénario, vous pouvez suivre les étapes décrites précédemment pour la manipulation de l’audio distant, en ne configurant un flux vocal que pour les contrôles de conversation auxquels vous souhaitez appliquer des effets audio. L’audio des autres contrôles de conversation distants sera automatiquement rendu sur les contrôles de conversation locaux, tant que les configurations de sourdine et d’autorisations le permettent.
Last modified on October 6, 2026