음성 활동 감지(Voice Activity Detection)
스트리밍 사운드 웨이브와 캡처 가능 사운드 웨이브 같은 파생 타입들은 음성 활동 감지(VAD)를 지원합니다. VAD는 음성이 감지될 때만 내부 버퍼에 오디오 데이터를 채우도록 들어오는 오디오 데이터를 필터링합니다.
이 플러그인은 두 가지 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);
VAD 모드 파라미터는 오디오 필터링의 공격성을 제어합니다. 값이 높을수록 제한적이어서 허위 양성(false positives) 보고 확률은 줄어들지만 일부 음성을 놓칠 수 있습니다.
VAD 제공자
ToggleVAD
함수로 VAD를 활성화한 후 필요에 맞는 다양한 Voice Activity Detection 제공자 중 선택할 수 있습니다. 기본 제공자는 내장되어 있으며, 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는 신경망을 사용하여 더 정확한 음성 감지를 제공합니다. 사용 방법:
- 프로젝트에 Runtime Audio Importer 플러그인이 설치되어 있는지 확인
- Google Drive에서 실레로 VAD 확장 플러그인 다운로드
- 다운로드한 아카이브의 폴더를 프로젝트의
Plugins
폴더에 압축 해제 (폴더가 없으면 생성) - 프로젝트 리빌드 (이 확장 기능은 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)
- 실레로 VAD는 언리얼 엔진 4.27 및 모든 UE5 버전 지원 (4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6)
- 실레로 VAD는 현재 Windows 전용
- 이 확장 기능은 소스 코드로 제공되며 사용 시 C++ 프로젝트 필요
- 플러그인 수동 빌드 방법에 대한 자세한 내용은 Building Plugins 튜토리얼 참조
설치 후 SetVADProvider
함수에 실레로 클래스 프로바이더를 지정하여 VAD 공급자로 선택할 수 있습니다.
음성 시작 및 종료 감지
Voice Activity Detection(VAD)은 음성의 존재뿐만 아니라 음성 활동의 시작과 종료도 감지할 수 있습니다. 이는 재생 또는 캡처 중 음성이 시작되거나 끝날 때 이벤트를 트리거하는 데 유용합니다.
최소 음성 지속 시간 및 무음 지속 시간과 같은 매개변수를 조정하여 음 성 시작 및 종료 감지의 민감도를 사용자 정의할 수 있습니다. 이러한 매개변수는 짧은 소음이나 음성 간의 너무 짧은 일시 정지와 같은 오탐을 피하기 위해 감지를 미세 조정하는 데 도움이 됩니다.
최소 음성 지속 시간
최소 음성 지속 시간 매개변수는 음성 시작 이벤트를 트리거하는 데 필요한 최소 연속 음성 활동량을 설정합니다. 이는 음성으로 간주되지 않아야 하는 짧은 소음을 필터링하여 지속적인 음성 활동만 인식되도록 합니다. 최소 음성 지속 시간의 기본값은 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보다 더 많은 계산 리소스를 필요로 할 수 있습니다.