Cancelamento de Eco Acústico
Streaming Sound Wave, juntamente 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 tocando através de 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 inclui 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 em seu projeto
- Baixe o plugin de extensão WebRTC AEC3 aqui
- Extraia a pasta do arquivo baixado para a pasta
Pluginsdo seu projeto (crie esta pasta se ela não existir) - Recompile 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 e 5.7)
- Esta extensão é fornecida como código-fonte e requer um projeto C++ para uso
- Para mais informações sobre como construir plugins manualmente, consulte o tutorial Building Plugins
Uso Básico
O fluxo de trabalho típico do AEC envolve três etapas:
- Habilitar AEC na sua streaming/capturable sound wave
- Configurar o tamanho do chunk de renderização na render sound wave para entrega de quadros de 10 ms
- Vincular a render sound wave cujo áudio será usado para cancelar o eco do sinal de captura
Habilitando AEC
Para habilitar o AEC após criar uma streaming sound wave, 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; no entanto, a taxa de amostragem configurada ainda afeta a qualidade (por exemplo, 48000 Hz produzirá um cancelamento de eco melhor do que 16000 Hz) e o desempenho, portanto, 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á atualmente habilitado:
- 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
O WebRTC AEC3 requer que o áudio seja processado em chunks de 10 ms. Para garantir que a onda sonora de renderização forneça dados de áudio no tamanho de quadro correto, use a função SetNumSamplesPerChunk na render Imported Sound Wave (a onda sonora 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 Render Sound Wave
Após habilitar o AEC e configurar o tamanho do chunk, vincule a render sound wave cujo áudio será usado para identificar e remover o eco do sinal de captura. Normalmente, esta é a sound wave que está sendo reproduzida pelos alto-falantes e 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 onda sonora de renderização:
- 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 do Stream
Você pode definir o atraso estimado do stream (em milissegundos) entre os caminhos de renderização e captura de áudio. Isso leva em conta a latência do hardware e do 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);
Redefinindo o AEC
Você pode redefinir o estado interno do processador AEC a qualquer momento, limpando qualquer modelo de eco acumulado:
- Blueprint
- C++

StreamingSoundWave->ResetAEC();
O WebRTC AEC3 suporta taxas de amostragem de 8000, 16000, 32000 e 48000 Hz. Áudio com taxa incompatível é reamostrado automaticamente, mas isso gera uma sobrecarga de desempenho. Para obter a melhor qualidade e desempenho, use 48000 Hz e corresponda à configuração de áudio real dos fluxos de captura e renderização.