音響エコーキャンセレーション
Streaming Sound Wave と、Capturable Sound Wave などの派生型は、音響エコーキャンセレーション (AEC) をサポートしています。AEC は、レンダー信号(例:スピーカーから再生されるオーディオ)の再生によって引き起こされる、キャプチャされたマイクオーディオからのエコーを除去します。これにより、リアルタイム通信シナリオでのよりクリーンな音声キャプチャが実現します。
このプラグインは、WebRTC AEC3 の実装を通じて AEC を提供します。これは、関連する AEC3 コードのみを含む軽量な拡張プラグインとして利用可能です。WebRTC AEC3 は、リアルタイム通信アプリケーションで広く使用されている高品質な音響エコーキャンセラです。スピーカーとマイク間の音響経路をモデル化し、キャプチャされた信号からエコーを減算します。
インストール
音響エコーキャンセレーションを使用するには、WebRTC AEC3 拡張プラグインをインストールする必要があります:
- Runtime Audio Importer プラグインがプロジェクトに既にインストールされていることを確認してください
- WebRTC AEC3 拡張プラグインをこちらからダウンロードします
- ダウンロードしたアーカイブからフォルダを抽出し、プロジェクトの
Pluginsフォルダに配置します(存在しない場合は作成してください) - プロジェクトをリビルドします(この拡張機能には C++ プロジェクトが必要です)
- WebRTC AEC3 は、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) をサポートしています
- この拡張機能はソースコードとして提供されており、使用するには C++ プロジェクトが必要です
- プラグインを手動でビルドする方法の詳細については、Building Plugins チュートリアルを参照してください
基本的な使用方法
典型的な AEC ワークフローは、次の3つのステップで構成されます:
- ストリーミング/キャプチャ可能なサウンドウェーブで AEC を有効にする
- レンダーサウンドウェーブで レンダーチャンクサイズを設定 し、10 ミリ秒フレームの配信を行う
- キャプチャ信号からエコーをキャンセルするために使用されるオーディオを持つ レンダーサウンドウェーブをバインドする
AEC の有効化
ストリーミングサウンドウェーブを作成した後、AEC を有効にするには、ToggleAEC 関数を使用します。AEC プロセッサのサンプルレートとチャンネル数を指定する必要があります。受信するキャプチャまたはレンダーオーディオがこれらの値と一致しない場合、自動的にリサンプリングされますが、設定されたサンプルレートは品質(例:48000 Hz は 16000 Hz よりも優れたエコーキャンセレーションを実現します)とパフォーマンスに影響を与えるため、リサンプリングに任せるのではなく、これらの値を意図的に選択する価値があります。
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleAEC(true, 48000, 1);
AECが現在有効かどうかを確認できます:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
bool bEnabled = StreamingSoundWave->IsAECEnabled();
レンダーチャンクサイズの設定
WebRTC AEC3は、オーディオを10ミリ秒のチャンクで処理する必要があります。レンダーサウンドウェーブが正しいフレームサイズでオーディオデータを提供することを保証するために、レンダー側のImported Sound Wave(スピーカーから再生されるサウンドウェーブ)に対してSetNumSamplesPerChunk関数を使用してください。
正しいチャンクあたりのサンプル数を計算する式は次のとおりです:
例えば、48000 Hzのオーディオの場合:48000 / 100 = 480 サンプルがチャンクごとに含まれます。
- 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);
レンダーサウンドウェーブのバインド
AECを有効にし、チャンクサイズを設定した後、キャプチャ信号からエコーを識別して除去するために使用されるオーディオのレンダーサウンドウェーブをバインドします。これは通常、マイクが拾う可能性のあるスピーカーから再生されているサウンドウェーブです:
- 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);
レンダリングされたサウンドウェーブのバインドを解除するには:
- 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);
追加設定
Stream Delay
レンダリングとキャプチャのオーディオパス間の推定ストリーム遅延(ミリ秒単位)を設定できます。これはハードウェアとシステムのレイテンシを考慮しますが、WebRTC AEC3は多くの場合これを自動的に推定できます:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->SetAECStreamDelay(50);
AECのリセット
内部のAECプロセッサの状態はいつでもリセットでき、蓄積されたエコーモデルをクリアします:
- Blueprint
- C++

StreamingSoundWave->ResetAEC();
WebRTC AEC3は、8000、16000、32000、および48000 Hzのサンプルレートをサポートしています。一致しないオーディオは自動的にリサンプリングされますが、これにはパフォーマンスのオーバーヘッドが伴います。最高の品質とパフォーマンスを得るには、48000 Hzを使用し、キャプチャストリームとレンダリングストリームの両方の実際のオーディオ設定を一致させてください。