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 porPartyAudioManipulationSourceStream.
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 dePartyAudioManipulationSourceStream::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 dePartyAudioManipulationSinkStream::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.
