マイク / 音声アクティビティ検出
マイクから OBS を制御できます。これは VTuber の定番である「発話中 → アニメーション、アイドル → 休止」ループを、完全にエンジン内で実現するものです。プラグインは入力の音声レベルを OBS の InputVolumeMeters 経由で監視し、デバウンス付きヒステリシス検出器(アタック/リリースのタイミングにより、短い語間でステートがちらつかないようにする)を通して処理し、入力が発話中 ⟷ アイドルのしきい値を超えるとイベントを発火します。
使い方
UInhyeongOBSSubsystem* OBS = GetGameInstance()->GetSubsystem<UInhyeongOBSSubsystem>();
// Start detecting. ThresholdDb / Attack / Release default to sensible voice values.
OBS->EnableMicActivityDetection(TEXT("Mic/Aux"), /*ThresholdDb=*/-40.f, /*Attack=*/0.05f, /*Release=*/0.5f);
// React to talking <-> idle transitions
OBS->OnMicActivityChanged.AddDynamic(this, &AMyActor::HandleMicActivity);
// ...or poll on demand
bool bTalking = OBS->IsMicActive(TEXT("Mic/Aux"));
// Stop detecting (leaves the underlying meter subscription on for other consumers)
OBS->DisableMicActivityDetection(TEXT("Mic/Aux"));
API
| メンバー | 説明 |
|---|---|
EnableMicActivityDetection(Input, ThresholdDb=-40, Attack=0.05, Release=0.5) | 指定した入力の検出を開始します。その入力の音量メーターを自動的に有効化します。 |
DisableMicActivityDetection(Input) | 検出を停止します。他のコンシューマーが利用している可能性があるため、内部のメーターサブスクリプションはそのままにします。 |
IsMicActive(Input) | 現在の発話中/アイドルのステートをポーリングします。 |
OnMicActivityChanged | 発話中 ⟷ アイドルのトランジションのたびに発火します。 |
パラメーター
- ThresholdDb: 入力が「発話中」とみなされる peak-dB レベル。
- Attack: 発話中に切り替わるまで、レベルがしきい値を上回り続ける必要がある秒数。
- Release: アイドルに切り替わるまで、レベルがしきい値を下回り続ける必要がある秒数(語間をまたいでステートがちらつかないようにするハングオーバー)。
仕組み
EnableMicActivityDetection は入力のメーターを自動的に登録するため、サブスクリプションを自分で管理する必要はありません。生のレベルだけが必要な場合(例: ゲーム内 VU メーターなど)は、SetVolumeMetersEnabled(true) を呼び出して OnInputVolumeMeters に直接バインドしてください。詳しくは音声ガイドを参照してください。
発話中/アイドルはトリガー条件としても利用できます。OBS Trigger Volume を参照してください。
注意: OBS はミュートされた入力に対して空のレベルを送信するため、検出はミュート解除された聴こえるソースに対してのみアクティブになります。
関連項目
- 音声ガイド: 音量メーター、ミュート/音量制御、生レベルストリーム。
- OBS Trigger Volume: 発話中/アイドルのステートに基づいて空間トリガーをゲート制御する。