Skip to content

Desuq Cafe

文档菜单

此翻译可能落后于最新的英文版本。 查看英文版

麦克风语音活动检测

从麦克风驱动 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:将输入判定为”说话”的峰值 dB 电平阈值。
  • Attack:电平持续高于阈值多少秒后切换为说话状态。
  • Release:电平持续低于阈值多少秒后切换回静默状态(延迟覆盖短暂停顿,避免状态闪烁)。

工作原理

EnableMicActivityDetection 会自动将输入的音量表纳入监视,无需手动管理订阅。如果只需要原始电平(例如游戏内 VU 表),可调用 SetVolumeMetersEnabled(true) 并直接绑定 OnInputVolumeMeters。详见音频指南

说话/静默状态也可作为 Trigger Volume 条件使用。详见 OBS Trigger Volume

注意: OBS 对静音输入发送空电平,因此检测仅在未静音且有声音的来源上激活。

另请参阅