Pular para o conteúdo principal

Streaming Sound Wave

Para Voice Activity Detection (VAD), consulte esta página.

Um streaming sound wave é um tipo de onda sonora importada que suporta a adição dinâmica de dados de áudio, mesmo durante a reprodução. Ele oferece a mesma funcionalidade de uma onda sonora importada, como rebobinar, e pode ser usado em SoundCues, etc.

Criando um streaming sound wave

Primeiro você deve criar um streaming sound wave. Observe que você deve tratá-lo como uma referência forte para evitar destruição prematura (por exemplo, atribuindo-o a uma variável separada em Blueprints ou usando UPROPERTY() em C++).

Create Streaming Sound Wave node

Reproduzindo a onda sonora

Você pode então reproduzir essa onda sonora. No entanto, isso não é necessário fazer agora, você pode começar a reproduzir a onda sonora mais tarde.

Vários exemplos de reprodução de uma onda sonora

Pré-alocação de dados de áudio

Opcionalmente, você pode pré-alocar dados de áudio (bytes) para evitar realocar todo o buffer PCM cada vez que novos dados de áudio são anexados.

Nó Pre Allocate Audio Data

Anexando dados de áudio

Para adicionar dados de áudio ao final do buffer existente, use as funções apropriadas para anexar dinamicamente dados de áudio. A reprodução seguirá a sequência de fila desses anexos.

Nó Append Audio Data

Evitando reprodução de áudio acelerada ou distorcida

Ao transmitir dados de áudio enquanto a onda sonora está sendo reproduzida, você pode enfrentar reprodução de áudio acelerada ou distorcida em cenários específicos. Esse problema geralmente ocorre quando:

  1. A reprodução da onda sonora está próxima/ao final do buffer atual
  2. Novos dados de áudio estão sendo continuamente enfileirados na onda sonora de streaming
  3. A reprodução alcança o fluxo de dados recebido

Você pode parar de popular dados de áudio a qualquer momento sem problemas. Porém, para cenários onde você precisa de streaming contínuo (como streaming de áudio em tempo real), existem duas abordagens dependendo da confiabilidade do seu fluxo de dados de áudio:

Para streaming confiável e consistente: Use o delegado OnPopulateAudioState para iniciar a reprodução imediatamente após o primeiro chunk ser recebido.

Para streaming não confiável (problemas de rede, dados intermitentes): Adicione um atraso adicional mesmo após OnPopulateAudioState ser acionado para construir um buffer maior antes de iniciar a reprodução.

Usando OnPopulateAudioState para evitar problemas de reprodução

Observação: Você pode parar de preencher dados de áudio a qualquer momento sem causar problemas na reprodução. A abordagem exata depende da confiabilidade do seu fluxo de dados de áudio - use reprodução imediata para fluxos consistentes, ou adicione um atraso de buffer adicional para fluxos não confiáveis (por exemplo, problemas de conectividade de rede).

Exemplo de uso

Por fim, sua implementação pode ficar assim:

Um exemplo de uso de uma onda sonora de streaming

On Populate Audio State

O delegado OnPopulateAudioState funciona de forma similar ao OnPopulateAudioData mas não transmite os dados de áudio populados. Isso pode ser útil quando você deseja rastrear quando os dados de áudio são populados sem passar um array dos dados de áudio populados, o que pode melhorar o desempenho.

On Populate Audio State delegate

Trabalhando com dados PCM

Para acesso em tempo real aos dados PCM durante a reprodução, consulte Manipulação de Dados PCM.