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

// 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());
現在のVADプロバイダーを取得する
ストリーミングサウンドウェーブに現在割り当てられているVADプロバイダーは、GetVADProvider 関数を使用して取得できます。これにより、Silero VADの音声閾値設定など、プロバイダー固有の機能にアクセスする必要がある場合に、個別の参照を保持する必要がなくなり便利です。
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Get the currently assigned VAD provider
URuntimeVADProviderBase* VADProvider = StreamingSoundWave->GetVADProvider();
プロバイダー固有の機能にアクセスするには、返されたプロバイダーを目的の型にキャストします。たとえば、Silero VAD固有の機能を利用するには:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Get the currently assigned VAD provider and cast it to the Silero VAD provider
if (URuntimeSileroVADProvider* SileroVADProvider = Cast<URuntimeSileroVADProvider>(StreamingSoundWave->GetVADProvider()))
{
// Use Silero VAD-specific functionality, such as SetSpeechThreshold
}
Silero VAD 拡張機能
Silero VADは、ニューラルネットワークを使用してより正確な音声検出を提供します。使用するには:
-
Runtime Audio Importerプラグインがプロジェクトにすでにインストールされていることを確認してください。
-
UE 5.5 以前の場合: Silero VAD 拡張プラグインをダウンロードする前に、プロジェクトで NNERuntimeORT が無効になっていることを確認してください。NNERuntimeORT が有効になっていると、これらのエンジンバージョンで Silero VAD を使用する際に競合によりクラッシュが発生する可能性があります。
-
Silero VAD 拡張プラグインをこちらからダウンロード
-
ダウンロードしたアーカイブからフォルダをプロジェクトの
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 以前: NNERuntimeORT は、プラグインの競合によるクラッシュを防ぐために、Silero VAD を使用する前に無効にする必要があります。特に 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++プロジェクトが必要です。
-
プラグインの手動ビルド方法の詳細については、プラグインのビルド チュートリアル をご覧ください。
インストール後、SetVADProvider 関数で Silero クラスのプロバイダーを指定して、VAD プロバイダーとして選択できます。
音声しきい値
Silero VAD プロバイダーは、音声セグメントを発話とみなすために必要な最小信頼度スコア(ニューラルネットワークの発話確率出力から)を制御する Speech Threshold パラメータを公開しています。このパラメータは、GetVADProvider でプロバイダーを取得し、それを Silero VAD プロバイダータイプにキャストした後で利用可能な SetSpeechThreshold 関数を使用して設定できます。
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Make sure the VAD provider has already been set to Silero VAD via SetVADProvider
// Get the VAD provider and cast it to the Silero VAD provider
if (URuntimeSileroVADProvider* SileroVADProvider = Cast<URuntimeSileroVADProvider>(StreamingSoundWave->GetVADProvider()))
{
// Set the speech threshold
bool bSuccess = SileroVADProvider->SetSpeechThreshold(0.5f);
}
SetSpeechThreshold は、しきい値が正常に適用された場合は true を返し、それ以外の場合は false を返します(たとえば、値が有効範囲外の場合など)。
高い閾値は検出をより保守的にします:背景ノイズからの誤検出を減らしますが、小さくて不明瞭な発話を見逃す可能性もあります。低い閾値は検出の感度を高めます:より多くの発話を捉えますが、誤検出のリスクが高まります。デフォルト値は 0.5 です。
音声開始・終了検出
音声アクティビティ検出は、発話の有無を検出するだけでなく、発話の開始と終了も検出できます。これは、再生中やキャプチャ中に発話が開始または終了したときにイベントをトリガーするのに役立ちます。
音声の開始と終了の検出感度は、最小発話時間や無音時間などのパラメータを調整することでカスタマイズできます。これらのパラメータは、短いノイズや発話間のあまりに短い間を拾ってしまう誤検出を防ぐように、検出を微調整するのに役立ちます。
最小音声持続時間
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);
無音時間
Silence Durationパラメータは、音声終了イベントをトリガーするために必要な無音の長さを設定します。これにより、単語や文の間の自然なポーズ中に音声検出が早まって終了するのを防ぎます。Silence Durationのデフォルト値は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プロバイダーの比較
- デフォルト VAD
- Silero VAD
デフォルト VAD (libfvad)
メリット:
- 軽量で効率的
- すべてのプラットフォームで動作
- 最小限のリソース消費
- モバイルや低電力デバイスに最適
最適:
- 静かな環境でのシンプルな音声検出
- モバイルアプリケーション
- パフォーマンスが優先されるプロジェクト
- ユニバーサルなプラットフォームサポートが必要な場合
Silero VAD
メリット:
- 音声検出の精度が向上
- 難環境での優れたノイズ耐性
- 異なる話者間でも一貫した結果
- 正確な制御のための高度な設定オプション
最適:
- 精密な音声検出が必要なアプリケーション
- 背景雑音のある環境
- 音声認識システム
- プロフェッショナルオーディオアプリケーション
Silero VAD はデフォルトの VAD よりも多くの計算リソースを必要とする場合があります。