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 parPartyAudioManipulationSourceStream.
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 viaPartyAudioManipulationSourceStream::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 viaPartyAudioManipulationSinkStream::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.
