音声アクティビティ検出
Streaming Sound Waveは、Capturable Sound Waveなどの派生型とともに、音声アクティビティ検出(VAD)をサポートしています。VADは、音声が検出された場合にのみ内部バッファにデータを格納するように、受信オーディオデータをフィルタリングします。
このプラグインは2つのVAD実装を提供しています:
- デフォルトVAD
- Silero VAD
デフォルトの実装は、libfvadを使用しています。これは、Runtime Audio Importerがサポートするすべてのプラットフォームとエンジンバージョンで効率的に動作する軽量の音声アクティビティ検出ライブラリです。
拡張プラグインとして利用可能なSilero VADは、ニューラルネットワークベースの音声アクティビティ検出器であり、特に騒がしい環境でより高い精度を提供します。機械学習を使用して、音声と背景ノイズをより確実に区別します。
基本的な使い方
サウンドウェーブを作成した後にVADを有効にするには、ToggleVAD 関数を使用します:
- Blueprint
- C++

```cpp
// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleVAD(true);
VADを有効にした後は、いつでもリセットできます。
- Blueprint
- C++

// Reset the VAD
StreamingSoundWave->ResetVAD();
デフォルトVAD設定
デフォルトのVADプロバイダーを使用している場合、VADモードを変更することでその攻撃性を調整できます:
- Blueprint
- C++

// Set the VAD mode (only works with the default VAD provider)
StreamingSoundWave->SetVADMode(ERuntimeVADMode::VeryAggressive);
modeパラメータは、VADが音声をフィルタリングする厳しさを制御します。値が高いほど制限が厳しくなり、誤検出の可能性は低くなりますが、一部の音声を見逃す可能性があります。
VADプロバイダー
ToggleVAD関数でVADを有効にした後、ニーズに合わせてさまざまな音声アクティビティ検出プロバイダーを選択できます。デフォルトのプロバイダーは組み込みのもので、Silero VADなどの追加プロバイダーは拡張プラグインを通じて利用できます。
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Make sure to call ToggleVAD(true) before setting the provider
// Set the VAD provider to Silero VAD
StreamingSoundWave->SetVADProvider(URuntimeSileroVADProvider::StaticClass());
Silero VAD Extension
Silero VADはニューラルネットワークを使用して、より正確な音声検出を提供します。使用するには:
-
プロジェクトに Runtime Audio Importer プラグインが既にインストールされていることを確認してください。
-
UE 5.5以前の場合: Silero VAD extensionプラグインをダウンロードする前に、プロジェクトでNNERuntimeORTが無効になっていることを確認してください。これらのエンジンバージョンでSilero VADを使用すると、NNERuntimeORTが有効だと競合が原因でクラッシュする可能性があります。
-
Silero VAD extensionプラグインを こちら からダウンロードします。
-
ダウンロードしたアーカイブからフォルダをプロジェクトの
Pluginsフォルダに展開します(存在しない場合はこのフォルダを作成してください)。 -
UE 5.6以降の場合:
RuntimeAudioImporterSileroVAD.upluginファイルを編集してNNERuntimeORTの依存関係を追加します。"Plugins"フィールドのRuntimeAudioImporterインクルードの後に、次を追加します:
,
{
"Name": "NNERuntimeORT",
"Enabled": true
}
- プロジェクトを再ビルドする (この拡張機能には C++ プロジェクトが必要です)
-
デフォルト VAD は、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、5.8) で動作します。
-
Silero VAD は Unreal Engine 4.27 とすべての UE5 バージョン (4.27、5.0、5.1、5.2、5.3、5.4、5.5、5.6、5.7、5.8) をサポートしています。
-
UE 5.5 以前: Silero VAD を使用する前に、プラグインの競合によるクラッシュを防ぐために NNERuntimeORT を無効にする必要があります。特に UE 5.3 では、NNERuntimeORTCpu と NNERuntimeORTGpu も無効にする必要があります。
-
UE 5.6 以降の要件: Unreal Engine 5.6 以降では、Silero VAD 拡張機能を使用するには、NNERuntimeORT プラグインの依存関係を
.upluginファイルに手動で追加する必要があります。 -
Silero VAD は Windows、Linux、Mac、Android (Meta Quest を含む)、iOS で利用可能です。
-
この拡張機能はソースコードとして提供されており、使用には C++ プロジェクトが必要です。
-
プラグインを手動でビルドする方法の詳細については、プラグインのビルドチュートリアル を参照してください。
インストール後、Silero クラスプロバイダーを指定して SetVADProvider 関数を使用することで、VAD プロバイダーとして選択できます。
音声の開始と終了の検出
Voice Activity Detection は、音声の有無を検出するだけでなく、音声アクティビティの開始と終了も検出できます。これは、再生中やキャプチャ中に音声が始まったときや終わったときにイベントをトリガーするのに役立ちます。
音声の開始と終了の検出の感度は、最小音声継続時間や無音継続時間などのパラメーターを調整することでカスタマイズできます。これらのパラメーターは、短いノイズや音声間の短すぎる無音を拾うような誤検出を避けるために検出を微調整するのに役立ちます。
最小音声継続時間
Minimum Speech Duration パラメーターは、音声開始イベントをトリガーするために必要な最小限の連続音声アクティビティの量を設定します。これは、音声と見なすべきでない短いノイズをフィルタリングし、持続的な音声アクティビティのみが認識されるようにするのに役立ちます。Minimum Speech Duration のデフォルト値は 300 ミリ秒 です。
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Set the minimum speech duration
StreamingSoundWave->SetMinimumSpeechDuration(200);
無音時間
無音時間パラメーターは、音声終了イベントをトリガーするために必要な無音時間を設定します。これにより、単語や文の間の自然なポーズ中に音声検出が早まって終了するのを防ぎます。無音時間のデフォルト値は500ミリ秒です。
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Set the silence duration
StreamingSoundWave->SetSilenceDuration(700);
スピーチデリゲートへのバインド
スピーチの開始時や終了時に特定のデリゲートにバインドできます。これは、テキスト認識の開始や停止、他のオーディオソースの音量調整など、スピーチのアクティビティに基づいてカスタム動作をトリガーするのに便利です。
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Bind to the OnSpeechStartedNative delegate
StreamingSoundWave->OnSpeechStartedNative.AddWeakLambda(this, [this]()
{
// Handle the result when speech starts
});
// Bind to the OnSpeechEndedNative delegate
StreamingSoundWave->OnSpeechEndedNative.AddWeakLambda(this, [this]()
{
// Handle the result when speech ends
});
VADプロバイダの比較
- Default VAD
- Silero VAD
Default VAD (libfvad)
メリット:
- 軽量かつ効率的
- すべてのプラットフォームで動作
- 最小限のリソース使用
- モバイルや低電力デバイスに適している
最適な用途:
- 静かな環境でのシンプルな音声検出
- モバイルアプリケーション
- パフォーマンスが優先されるプロジェクト
- ユニバーサルなプラットフォームサポートが必要な場合
Silero VAD
メリット:
- 音声検出の精度が高い
- 困難な環境での優れたノイズ耐性
- 異なる話者間でより一貫した結果
- 正確な制御のための高度な設定オプション
最適な用途:
- 正確な音声検出が必要なアプリケーション
- バックグラウンドノイズのある環境
- 音声認識システム
- プロフェッショナルなオーディオアプリケーション
Silero VADは、デフォルトのVADよりも多くの計算リソースを必要とする場合があります。