Skip to main content
O PlayFab Party é uma solução de rede e chat de voz em tempo real. Quando configurado para chat de voz, o PlayFab Party transmite o áudio do microfone e o reproduz sem modificações. Alguns jogos precisam de acesso aos buffers de áudio do chat de voz para implementar efeitos de áudio personalizados, como áudio espacial ou filtros de voz. Este documento fornece um passo a passo de como usar o recurso de manipulação de áudio em tempo real para interceptar e modificar o áudio do chat de voz no PlayFab Party.

Pré-requisitos

Este passo a passo pressupõe que você tenha familiaridade básica com o chat de voz no PlayFab Party.

Suporte a plataformas

A manipulação de áudio em tempo real não está disponível em todas as plataformas. Embora os métodos associados à manipulação de áudio em tempo real estejam presentes no cabeçalho unificado e multiplataforma, no momento eles são implementados somente para Windows, XBOX e PlayStation® 5. Os métodos retornarão erros em outras plataformas.

Fluxos de áudio

A manipulação de áudio em tempo real introduz o conceito de fluxos de áudio para recuperar áudio da biblioteca ou enviar áudio a ela. Há dois tipos de fluxos de áudio. O primeiro é o fluxo de origem. Um fluxo de origem é usado para recuperar áudio de um controle de chat. Cada controle de chat pode ter apenas um único fluxo de origem, chamado de fluxo de voz. Para um controle de chat local, ele é usado para recuperar a entrada do microfone; para um controle de chat remoto, ele é usado para recuperar o áudio de voz recebido. Se o fluxo de voz existir para um controle de chat, a biblioteca redirecionará o áudio de origem desse controle de chat para o fluxo de voz em vez de processar o áudio automaticamente. Para um controle de chat local, isso significa redirecionar o áudio do microfone para o fluxo de voz em vez de codificá-lo e transmiti-lo automaticamente; para um controle de chat remoto, isso significa redirecionar o áudio de voz recebido para o fluxo de voz em vez de enviá-lo automaticamente a cada controle de chat local para ser reproduzido. Os fluxos de origem são representados por PartyAudioManipulationSourceStream. O segundo tipo de fluxo é o fluxo de coletor. Um fluxo de coletor é usado para enviar áudio a um controle de chat. Somente controles de chat locais podem ter fluxos de coletor, e cada um pode ter dois. Eles são chamados de fluxo de captura e fluxo de renderização. Se o fluxo de captura existir para um controle de chat, a biblioteca obterá o áudio do fluxo de captura para codificar e transmitir a outros controles de chat em vez do microfone. Se o fluxo de renderização existir para um controle de chat, a biblioteca obterá o áudio do fluxo de renderização e o reproduzirá além do áudio do chat de voz que é reproduzido automaticamente a partir de controles de chat remotos. O áudio enviado ao fluxo de captura é usado como a entrada de microfone do controle de chat local; o áudio enviado ao fluxo de renderização é reproduzido ou “renderizado” no dispositivo de saída de áudio do controle de chat local. Os fluxos de coletor são representados por PartyAudioManipulationSinkStream.

Configurando fluxos de áudio

Por padrão, a biblioteca cuida da recuperação, do transporte e da reprodução do áudio. Portanto, os controles de chat são criados sem nenhum fluxo de áudio. Você pode criar um ou mais fluxos para um controle de chat por meio dos métodos de configuração de fluxo - PartyLocalChatControl::ConfigureAudioManipulationCaptureStream(), PartyLocalChatControl::ConfigureAudioManipulationRenderStream() e PartyChatControl::ConfigureAudioManipulationVoiceStream(). Depois de configurado, um fluxo pode ser recuperado posteriormente por meio de PartyLocalChatControl::GetAudioManipulationCaptureStream(), PartyLocalChatControl::GetAudioManipulationRenderStream() e PartyChatControl::GetAudioManipulationVoiceStream() Cada método de configuração de fluxo permite especificar o formato do áudio que você recuperará do fluxo ou enviará a ele. Para obter mais informações sobre os formatos com suporte, consulte a documentação de referência de cada método de configuração de fluxo.

Recuperando áudio de um fluxo de origem

Você pode recuperar áudio de um fluxo de origem por meio de PartyAudioManipulationSourceStream::GetNextBuffer(). Quando uma atividade de voz é detectada, um novo buffer fica disponível aproximadamente a cada 40 ms. Se nenhum buffer estiver disponível, a chamada será bem-sucedida e fornecerá um buffer de comprimento zero. O número total de buffers disponíveis instantaneamente pode ser recuperado por meio de PartyAudioManipulationSourceStream::GetAvailableBufferCount(). Para maior eficiência, GetNextBuffer() fornece um buffer que aponta para a memória da biblioteca em vez de copiar o buffer inteiro. Opcionalmente, ele pode ser modificado no local. Quando terminar de processar um buffer, você deverá liberá-lo por meio de PartyAudioManipulationSourceStream::ReturnBuffer() para que a biblioteca possa recuperar sua memória. Vários buffers podem ser recuperados antes que qualquer um seja devolvido, e os buffers não precisam ser devolvidos na ordem em que foram recuperados.

Enviar áudio para um fluxo de coletor

Você pode enviar áudio para um fluxo de coletor por meio de PartyAudioManipulationSinkStream::SubmitBuffer(). O buffer é copiado pela biblioteca e pode ser liberado imediatamente após a conclusão da chamada. A cada 40 ms, a biblioteca consome 40 ms do áudio que foi enviado ao fluxo de coletor. Para evitar falhas no áudio, o áudio deve ser enviado a uma taxa constante.

Cenários

Manipulação do áudio do microfone, também conhecida como manipulação de buffer pré-codificação

A manipulação do áudio do microfone é o ato de interceptar e alterar o áudio do microfone antes que ele seja transmitido a outros controles de chat. Às vezes, isso é chamado de “manipulação de buffer pré-codificação”, porque o áudio do microfone é modificado antes de ser codificado e transmitido a outros controles de chat. Se você quiser implementar esse cenário para um controle de chat local, primeiro configure um fluxo de voz e um fluxo de captura para o controle de chat local. Depois de configurados, uma função chamada a cada tique de um thread de áudio dedicado para processar o áudio do microfone desse único controle de chat pode ser semelhante à seguinte.

Manipulação de áudio remoto, também conhecida como manipulação de buffer pós-decodificação

A manipulação de áudio remoto é o ato de interceptar e alterar o áudio recebido antes que ele seja renderizado para cada controle de chat local. Às vezes, isso é chamado de “manipulação de buffer pós-decodificação”, porque o áudio recebido é modificado depois de ser decodificado, mas antes de ser renderizado. Se você quiser implementar esse cenário, primeiro configure o fluxo de voz para cada controle de chat remoto e o fluxo de renderização para cada controle de chat local. Em seguida, a cada tique, seu thread de áudio deve obter o áudio de cada fluxo de voz, mixar o áudio em um único fluxo enquanto aplica efeitos opcionalmente e enviar o buffer mixado para cada fluxo de renderização. Dependendo do cenário do seu jogo, talvez seja necessário mixar os buffers em fluxos diferentes para cada controle de chat local. Uma função chamada a cada tique de um thread de áudio dedicado para processar o áudio de voz recebido pode ser semelhante à seguinte.

Considerações sobre privacidade e mixagem

A biblioteca fornecerá áudio por meio do fluxo de voz de um controle de chat remoto desde que o controle de chat remoto esteja gerando áudio e as configurações de permissão de chat e de mudo permitam que o áudio seja reproduzido por pelo menos um controle de chat local. Se o áudio tiver de ser reproduzido para um controle de chat local, mas não para outro, você deverá omiti-lo da mixagem de áudio desse último controle de chat.

Considerações sobre o indicador de chat

Configurar um fluxo de voz para um controle de chat remoto não afetará seu indicador de chat. Talvez seja necessário implementar uma lógica para conciliar as diferenças entre o indicador de chat e sua lógica de mixagem a fim de escolher o indicador de interface do usuário correto. Por exemplo, o indicador de chat pode indicar que o controle de chat está falando, mas uma lógica de mixagem personalizada pode optar por descartar o áudio.

Cenários mistos

Em alguns cenários, talvez você queira habilitar a manipulação de áudio para alguns controles de chat, mas não para outros. Por exemplo, talvez você queira aplicar efeitos aos jogadores adversários encontrados durante uma partida, mas não aos jogadores da mesma equipe. Nesse cenário, você pode seguir as etapas descritas anteriormente para a manipulação de áudio remoto, configurando um fluxo de voz somente para os controles de chat aos quais deseja aplicar efeitos de áudio. O áudio dos controles de chat remotos restantes será renderizado automaticamente para os controles de chat locais, desde que as configurações de mudo e de permissão permitam.
Last modified on October 6, 2026