음성 활동 감지
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);
mode 매개변수는 VAD가 오디오를 얼마나 적극적으로 필터링하는지 제어합니다. 더 높은 값은 더 제한적이어서 오탐지가 적을 가능성이 높지만 일부 음성을 놓칠 수 있습니다.
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 확장 플러그인을 다운로드하기 전에 프로젝트에서 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 이하: 플러그인 충돌로 인한 크래시를 방지하려면 Silero VAD를 사용하기 전에 NNERuntimeORT를 비활성화해야 합니다. 특히 UE 5.3에서는 NNERuntimeORTCpu와 NNERuntimeORTGpu도 비활성화해야 합니다
-
UE 5.6 이상 요구 사항: Unreal Engine 5.6부터 Silero VAD 확장 기능을 사용하려면
.uplugin파일에 NNERuntimeORT 플러그인 의존성을 수동으로 추가해야 합니다 -
Silero VAD는 Windows, Linux, Mac, Android (Meta Quest 포함) 및 iOS에서 사용할 수 있습니다
-
이 확장 기능은 소스 코드로 제공되며 사용하려면 C++ 프로젝트가 필요합니다
-
플러그인을 수동으로 빌드하는 방법에 대한 자세한 내용은 Building Plugins 튜토리얼을 참조하세요
설치한 후에는 SetVADProvider 함수와 Silero 클래스 제공자를 사용하여 이를 VAD 제공자로 선택할 수 있습니다.
음성 시작 및 종료 감지
음성 활동 감지는 단순히 음성의 존재를 감지할 뿐만 아니라 음성 활동의 시작과 종료를 감지할 수도 있습니다. 이는 재생 또는 캡처 중에 음성이 시작되거나 끝날 때 이벤트를 트리거하는 데 유용합니다.
최소 발화 지속 시간 및 무음 지속 시간과 같은 매개변수를 조정하여 음성 시작 및 종료 감지의 민감도를 사용자 지정할 수 있습니다. 이러한 매개변수는 간단한 소음이나 음성 사이의 너무 짧은 무음을 감지하는 등의 잘못된 긍정을 방지하도록 감지를 미세 조정하는 데 도움이 됩니다.
최소 발화 지속 시간
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 파라미터는 음성 종료 이벤트를 트리거하는 데 필요한 무음 지속 시간을 설정합니다. 이것은 단어나 문장 사이의 자연스러운 일시 정지 중에 음성 감지가 조기에 종료되는 것을 방지합니다. 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 제공자 비교
- Default VAD
- Silero VAD
Default VAD (libfvad)
장점:
- 가볍고 효율적
- 모든 플랫폼에서 작동
- 최소한의 리소스 사용
- 모바일 및 저전력 기기에 적합
최적 용도:
- 조용한 환경에서의 간단한 음성 감지
- 모바일 애플리케이션
- 성능이 우선시되는 프로젝트
- 보편적인 플랫폼 지원이 필요할 때
Silero VAD
장점:
- 음성 감지 정확도 향상
- 소음이 많은 환경에서 뛰어난 내성
- 다양한 화자에 걸쳐 일관된 결과
- 정밀한 제어를 위한 고급 구성 옵션
최적 용도:
- 정밀한 음성 감지가 필요한 애플리케이션
- 배경 소음이 있는 환경
- 음성 인식 시스템
- 전문 오디오 애플리케이션
Silero VAD는 default VAD보다 더 많은 계산 리소스를 요구할 수 있습니다.