Requisitos previos
Este tutorial supone que está básicamente familiarizado con el chat de voz en PlayFab Party.Compatibilidad con plataformas
La manipulación de audio en tiempo real no está disponible en todas las plataformas. Aunque los métodos asociados con la manipulación de audio en tiempo real están presentes en el encabezado unificado multiplataforma, actualmente solo están implementados para Windows, XBOX y PlayStation® 5. Los métodos devolverán errores en otras plataformas.Secuencias de audio
La manipulación de audio en tiempo real introduce el concepto de secuencias de audio para recuperar audio de la biblioteca o enviarle audio. Hay dos tipos de secuencias de audio. El primero es la secuencia de origen. Una secuencia de origen se usa para recuperar audio de un control de chat. Cada control de chat solo puede tener una única secuencia de origen, denominada secuencia de voz. Para un control de chat local, se usa para recuperar la entrada del micrófono; para un control de chat remoto, se usa para recuperar el audio de voz entrante. Si la secuencia de voz existe para un control de chat, la biblioteca redirigirá el audio de origen de ese control de chat a su secuencia de voz en lugar de gestionar el audio automáticamente. Para un control de chat local, esto significa redirigir el audio del micrófono a la secuencia de voz en lugar de codificarlo y transmitirlo automáticamente; para un control de chat remoto, esto significa redirigir el audio de voz entrante a la secuencia de voz en lugar de enviarlo automáticamente a cada control de chat local para su reproducción. Las secuencias de origen se representan mediantePartyAudioManipulationSourceStream.
El segundo tipo de secuencia es la secuencia de receptor. Una secuencia de receptor se usa para enviar audio a un control de chat. Solo los controles de chat locales pueden tener secuencias de receptor, y cada uno puede tener dos. Se denominan secuencia de captura y secuencia de representación. Si la secuencia de captura existe para un control de chat, la biblioteca extraerá el audio de la secuencia de captura para codificarlo y transmitirlo a otros controles de chat en lugar del micrófono. Si la secuencia de representación existe para un control de chat, la biblioteca extraerá el audio de la secuencia de representación y lo reproducirá además del audio del chat de voz que se reproduce automáticamente desde los controles de chat remotos. El audio enviado a la secuencia de captura se usa como entrada de micrófono del control de chat local; el audio enviado a la secuencia de representación se reproduce o “representa” en el dispositivo de salida de audio del control de chat local. Las secuencias de receptor se representan mediante PartyAudioManipulationSinkStream.
Configuración de secuencias de audio
De forma predeterminada, la biblioteca se encarga de la recuperación, el transporte y la reproducción del audio. Por lo tanto, los controles de chat se crean sin ninguna secuencia de audio. Puede crear una o varias secuencias para un control de chat mediante los métodos de configuración de secuencias:PartyLocalChatControl::ConfigureAudioManipulationCaptureStream(), PartyLocalChatControl::ConfigureAudioManipulationRenderStream() y PartyChatControl::ConfigureAudioManipulationVoiceStream(). Una vez configurada, una secuencia puede recuperarse posteriormente mediante PartyLocalChatControl::GetAudioManipulationCaptureStream(), PartyLocalChatControl::GetAudioManipulationRenderStream() y PartyChatControl::GetAudioManipulationVoiceStream()
Cada método de configuración de secuencias le permite especificar el formato del audio que recuperará de la secuencia o que le enviará. Para obtener más información sobre los formatos admitidos, consulte la documentación de referencia de cada método de configuración de secuencias.
Recuperación de audio de una secuencia de origen
Puede recuperar audio de una secuencia de origen mediantePartyAudioManipulationSourceStream::GetNextBuffer(). Cuando se detecta actividad de voz, habrá un nuevo búfer disponible aproximadamente cada 40 ms. Si no hay búferes disponibles, la llamada se realizará correctamente y proporcionará un búfer de longitud cero. El número total de búferes disponibles en un instante dado se puede recuperar mediante PartyAudioManipulationSourceStream::GetAvailableBufferCount().
Por eficiencia, GetNextBuffer() proporciona un búfer que apunta a la memoria de la biblioteca en lugar de copiar todo el búfer. Opcionalmente, se puede modificar en su lugar. Cuando haya terminado de procesar un búfer, debe liberarlo mediante PartyAudioManipulationSourceStream::ReturnBuffer() para que la biblioteca pueda reclamar su memoria. Se pueden recuperar varios búferes antes de devolver alguno, y los búferes no tienen que devolverse en el orden en que se recuperaron.
Envío de audio a una secuencia de receptor
Puede enviar audio a una secuencia de receptor mediantePartyAudioManipulationSinkStream::SubmitBuffer(). La biblioteca copia el búfer, que se puede liberar inmediatamente después de completarse la llamada.
Cada 40 ms, la biblioteca consume 40 ms del audio que se ha enviado a la secuencia de receptor. Para evitar interrupciones de audio, el audio debe enviarse a un ritmo constante.
