음성 활동 감지
Streaming Sound Wave는 Capturable Sound Wave와 같은 파생 유형들과 함께 음성 활동 감지(VAD)를 지원합니다. VAD는 들어오는 오디오 데이터를 필터링하여 음성이 감지되었을 때만 내부 버퍼를 채웁니다.
이 플러그인은 두 가지 VAD 구현을 제공합니다:
- 기본 VAD
- Silero VAD
기본 구현에서는 Runtime Audio Importer가 지원하는 모든 플랫폼과 엔진 버전에서 효율적으로 작동하는 경량 음성 활동 감지 라이브러리인 libfvad를 사용합니다.
확장 플러그인으로 제공되는 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);
모드 매개변수는 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 Provider 가져오기
스트리밍 사운드 웨이브에 현재 할당된 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 Extension
Silero VAD는 신경망을 사용하여 더 정확한 음성 감지를 제공합니다. 사용하려면:
-
Runtime Audio Importer 플러그인이 프로젝트에 이미 설치되어 있는지 확인하세요.
-
UE 5.5 및 이전 버전의 경우: Silero VAD extension plugin을 다운로드하기 전에 프로젝트에서 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를 반환합니다(예를 들어 값이 유효 범위를 벗어난 경우).
A 높은 임계값은 감지를 더 보수적으로 만듭니다: 배경 소음으로 인한 오탐지를 줄여주지만, 더 조용하거나 명확하지 않은 음성을 놓칠 수도 있습니다. A 낮은 임계값은 감지를 더 민감하게 만듭니다: 더 많은 음성을 포착하지만 오탐지 위험이 높아집니다. 기본값은 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);
Speech Delegates에 바인딩
음성이 시작되거나 종료될 때 특정 델리게이트에 바인딩할 수 있습니다. 이는 음성 활동을 기반으로 텍스트 인식 시작/중지 또는 다른 오디오 소스의 볼륨 조절과 같은 커스텀 동작을 트리거하는 데 유용합니다.
- 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보다 더 많은 계산 리소스가 필요할 수 있습니다.