Cancelamento de Eco Acústico
Streaming Sound Wave, junto com seus tipos derivados como Capturable Sound Wave, suporta Cancelamento de Eco Acústico (AEC). O AEC remove o eco do áudio capturado pelo microfone causado pela reprodução de um sinal de renderização (por exemplo, áudio sendo reproduzido pelos alto-falantes). O resultado é uma captura de voz mais limpa em cenários de comunicação em tempo real.
O plugin fornece AEC através da implementação WebRTC AEC3, disponível como um plugin de extensão leve que contém apenas o código relevante do AEC3. O WebRTC AEC3 é um cancelador de eco acústico de alta qualidade amplamente utilizado em aplicações de comunicação em tempo real. Ele modela o caminho acústico entre os alto-falantes e o microfone para subtrair o eco do sinal capturado.
Instalação
Para usar o Cancelamento de Eco Acústico, você precisa instalar o plugin de extensão WebRTC AEC3:
- Certifique-se de que o plugin Runtime Audio Importer já está instalado no seu projeto
- Baixe o plugin de extensão WebRTC AEC3 aqui
- Extraia a pasta do arquivo baixado para a pasta
Pluginsdo seu projeto (crie essa pasta se ela não existir) - Reconstrua seu projeto (esta extensão requer um projeto C++)
- O WebRTC AEC3 suporta todas as versões do motor suportadas pelo Runtime Audio Importer (UE 4.24, 4.25, 4.26, 4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, e 5.8)
- Esta extensão é fornecida como código-fonte e requer um projeto C++ para uso
- O WebRTC AEC3 está disponível para Windows, Linux, Mac, Android (incluindo Meta Quest), e iOS
- Para mais informações sobre como compilar plugins manualmente, veja o tutorial Building Plugins
Uso Básico
O fluxo de trabalho típico do AEC envolve três etapas:
- Ativar AEC na sua Sound Wave de streaming/capturável
- Configurar o tamanho do bloco de renderização na Sound Wave de renderização para entrega de quadros de 10 ms
- Vincular a Sound Wave de renderização cujo áudio será usado para cancelar o eco do sinal de captura
Ativando o AEC
Para ativar o AEC após criar uma Sound Wave de streaming, use a função ToggleAEC. Você deve especificar a taxa de amostragem e o número de canais para o processador AEC. Se o áudio de captura ou renderização de entrada não corresponder a esses valores, ele será reamostrado automaticamente, porém, a taxa de amostragem configurada ainda afeta a qualidade (por exemplo, 48000 Hz proporcionará um melhor cancelamento de eco do que 16000 Hz) e o desempenho, então vale a pena escolher esses valores deliberadamente em vez de deixar para a reamostragem.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleAEC(true, 48000, 1);
Você pode verificar se o AEC está ativado no momento:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
bool bEnabled = StreamingSoundWave->IsAECEnabled();
Configurando o Tamanho do Chunk de Renderização
WebRTC AEC3 exige que o áudio seja processado em chunks de 10 ms. Para garantir que a onda sonora de renderização entregue os dados de áudio no tamanho de quadro correto, use a função SetNumSamplesPerChunk na renderização da Imported Sound Wave (a sound wave que está sendo reproduzida pelos alto-falantes).
A fórmula para calcular o número correto de amostras por chunk é:
Por exemplo, para áudio de 48000 Hz: 48000 / 100 = 480 amostras por bloco.
- Blueprint
- C++

// Assuming ImportedSoundWave is a UE reference to a UImportedSoundWave object (the render sound wave being played through speakers)
ImportedSoundWave->SetNumSamplesPerChunk(ImportedSoundWave->GetSampleRate() / 100);
Vinculando a Onda Sonora de Renderização
Após habilitar a AEC e configurar o tamanho do chunk, vincule a onda sonora de renderização cujo áudio será usado para identificar e remover o eco do sinal de captura. Normalmente, essa é a onda sonora sendo reproduzida pelos alto-falantes que o microfone pode captar:
- Blueprint
- C++

// Assuming StreamingSoundWave is the capture sound wave (microphone input) with AEC enabled
// (can also be a UCapturableSoundWave, which is the most common use case)
// Assuming ImportedSoundWave is the render sound wave being played through speakers
StreamingSoundWave->BindAECToSoundWavePlayback(ImportedSoundWave);
Para desvincular a renderização da onda sonora:
- Blueprint
- C++

// Assuming StreamingSoundWave is the capture sound wave (microphone input) with AEC enabled
// (can also be a UCapturableSoundWave, which is the most common use case)
// Assuming ImportedSoundWave is the render sound wave being played through speakers
StreamingSoundWave->UnbindAECFromSoundWavePlayback(ImportedSoundWave);
Configuração Adicional
Atraso de streaming
Você pode definir o atraso estimado do fluxo (em milissegundos) entre os caminhos de renderização e captura de áudio. Isso leva em conta a latência de hardware e sistema, embora o WebRTC AEC3 possa estimar isso automaticamente em muitos casos:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->SetAECStreamDelay(50);
Reinicializando o AEC
Você pode redefinir o estado interno do processador AEC a qualquer momento, limpando qualquer modelo de eco acumulado:
- Blueprint
- C++

StreamingSoundWave->ResetAEC();
WebRTC AEC3 suporta taxas de amostragem de 8000, 16000, 32000 e 48000 Hz. Áudios com taxas diferentes são reamostrados automaticamente, mas isso gera um custo de desempenho. Para melhor qualidade e desempenho, use 48000 Hz e corresponda à configuração de áudio real dos fluxos de captura e renderização.