Phát hiện hoạt động giọng nói
Streaming Sound Wave, cùng với các kiểu dẫn xuất của nó như Capturable Sound Wave, hỗ trợ Phát Hiện Hoạt Động Giọng Nói (VAD). VAD lọc dữ liệu âm thanh đầu vào để chỉ điền vào bộ đệm nội bộ khi phát hiện giọng nói.
Plugin này cung cấp hai cách triển khai VAD:
- Mặc định VAD
- Silero VAD
Triển khai mặc định sử dụng libfvad, một thư viện phát hiện hoạt động giọng nói nhẹ hoạt động hiệu quả trên tất cả các nền tảng và phiên bản engine được hỗ trợ bởi Runtime Audio Importer.
Có sẵn dưới dạng plugin mở rộng, Silero VAD là bộ phát hiện hoạt động giọng nói dựa trên mạng nơ-ron cung cấp độ chính xác cao hơn, đặc biệt là trong môi trường ồn ào. Nó sử dụng học máy để phân biệt lời nói với tiếng ồn nền một cách đáng tin cậy hơn.
Cách sử dụng cơ bản
Để kích hoạt VAD sau khi tạo một sound wave, hãy sử dụng hàm ToggleVAD:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleVAD(true);
Sau khi bật VAD, bạn có thể đặt lại nó bất cứ lúc nào:
- Blueprint
- C++

// Reset the VAD
StreamingSoundWave->ResetVAD();
Cài đặt VAD mặc định
Khi sử dụng nhà cung cấp VAD mặc định, bạn có thể điều chỉnh mức độ nhạy của nó bằng cách thay đổi chế độ VAD:
- Blueprint
- C++

// Set the VAD mode (only works with the default VAD provider)
StreamingSoundWave->SetVADMode(ERuntimeVADMode::VeryAggressive);
Tham số mode kiểm soát mức độ quyết liệt mà VAD lọc âm thanh. Giá trị càng cao thì càng hạn chế, nghĩa là ít có khả năng báo dương tính giả nhưng có thể bỏ sót một số giọng nói.
Nhà cung cấp VAD
Sau khi kích hoạt VAD bằng hàm ToggleVAD, bạn có thể chọn giữa các nhà cung cấp phát hiện hoạt động giọng nói khác nhau để phù hợp với nhu cầu của mình. Nhà cung cấp mặc định được tích hợp sẵn, trong khi các nhà cung cấp bổ sung như Silero VAD có sẵn thông qua các plugin mở rộng.
- 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());
Lấy Nhà cung cấp VAD hiện tại
Bạn có thể lấy nhà cung cấp VAD hiện được gán cho một Sound Wave đang phát trực tuyến bằng cách sử dụng hàm GetVADProvider. Điều này hữu ích khi bạn cần truy cập chức năng dành riêng cho nhà cung cấp, chẳng hạn như cài đặt ngưỡng giọng nói của Silero VAD, mà không cần phải giữ một tham chiếu riêng.
- 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();
Để truy cập các tính năng dành riêng cho provider, hãy ép kiểu provider được trả về sang kiểu mong muốn. Ví dụ: để truy cập chức năng cụ thể của 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 cung cấp khả năng phát hiện giọng nói chính xác hơn bằng cách sử dụng mạng nơ-ron. Để sử dụng:
-
Hãy đảm bảo rằng plugin Runtime Audio Importer đã được cài đặt trong dự án của bạn.
-
Dành cho UE 5.5 trở về trước: Trước khi tải xuống plugin mở rộng Silero VAD, hãy đảm bảo rằng NNERuntimeORT đã bị vô hiệu hóa trong dự án của bạn. Việc kích hoạt NNERuntimeORT có thể gây ra sự cố khi sử dụng Silero VAD trên các phiên bản engine này do xung đột.
-
Tải xuống plugin mở rộng Silero VAD từ đây
-
Giải nén thư mục từ kho lưu trữ đã tải xuống vào thư mục
Pluginscủa dự án của bạn (tạo thư mục này nếu nó chưa tồn tại). -
Đối với UE 5.6 trở lên: Sửa tệp
RuntimeAudioImporterSileroVAD.upluginđể thêm phụ thuộc NNERuntimeORT. Trong trường "Plugins", sau khi thêm RuntimeAudioImporter, hãy thêm:,{"Name": "NNERuntimeORT","Enabled": true} -
Xây dựng lại dự án của bạn (tiện ích mở rộng này yêu cầu một dự án C++)
-
VAD mặc định hoạt động với tất cả phiên bản engine được hỗ trợ bởi 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, và 5.8)
-
Silero VAD hỗ trợ Unreal Engine 4.27 và tất cả các phiên bản UE5 (4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7 và 5.8)
-
UE 5.5 trở về trước: NNERuntimeORT phải được tắt trước khi sử dụng Silero VAD để ngăn chặn sự cố do xung đột plugin. Cụ thể trong UE 5.3, NNERuntimeORTCpu và NNERuntimeORTGpu cũng phải được tắt.
-
Yêu cầu UE 5.6+: Bắt đầu từ Unreal Engine 5.6, tiện ích mở rộng Silero VAD yêu cầu phụ thuộc plugin NNERuntimeORT được thêm thủ công vào tệp
.uplugin -
Silero VAD có sẵn cho Windows, Linux, Mac, Android (bao gồm Meta Quest) và iOS
-
Tiện ích mở rộng này được cung cấp dưới dạng mã nguồn và yêu cầu một dự án C++ để sử dụng.
-
Để biết thêm thông tin về cách xây dựng plugin thủ công, hãy xem Hướng dẫn Xây dựng Plugin
Khi đã cài đặt, bạn có thể chọn nó làm nhà cung cấp VAD của mình bằng cách sử dụng hàm SetVADProvider với nhà cung cấp Silero.
Ngưỡng giọng nói
Silero VAD provider hiển thị một tham số Speech Threshold điều khiển điểm tin cậy tối thiểu (từ đầu ra xác suất giọng nói của mạng nơ-ron) cần thiết để coi một đoạn âm thanh là giọng nói. Bạn có thể đặt nó bằng cách sử dụng hàm SetSpeechThreshold, có sẵn sau khi lấy provider bằng GetVADProvider và ép kiểu nó thành kiểu Silero VAD provider.
- 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 trả về true nếu ngưỡng được áp dụng thành công, và false nếu không (ví dụ như nếu giá trị nằm ngoài phạm vi hợp lệ).
Một ngưỡng cao hơn làm cho việc phát hiện trở nên thận trọng hơn: nó giảm thiểu các kết quả dương tính giả từ tiếng ồn nền, nhưng có thể bỏ sót các giọng nói nhẹ hoặc không rõ ràng. Một ngưỡng thấp hơn làm cho việc phát hiện nhạy hơn: nó bắt được nhiều giọng nói hơn, nhưng nguy cơ dương tính giả tăng lên. Giá trị mặc định là 0.5.
Phát hiện bắt đầu và kết thúc lời nói
Phát hiện hoạt động giọng nói không chỉ phát hiện sự hiện diện của giọng nói, mà còn cho phép phát hiện thời điểm bắt đầu và kết thúc hoạt động giọng nói. Điều này hữu ích để kích hoạt sự kiện khi giọng nói bắt đầu hoặc kết thúc trong quá trình phát lại hoặc thu âm.
Bạn có thể tùy chỉnh độ nhạy của việc phát hiện bắt đầu và kết thúc giọng nói bằng cách điều chỉnh các tham số như thời lượng giọng nói tối thiểu và thời lượng im lặng. Những tham số này giúp tinh chỉnh việc phát hiện để tránh các lỗi phát hiện sai, ví dụ như nhận diện nhầm âm thanh ngắn hoặc các khoảng dừng quá ngắn giữa các câu nói.
Thời lượng thoại tối thiểu
Tham số Minimum Speech Duration đặt lượng tối thiểu của hoạt động giọng nói liên tục cần thiết để kích hoạt sự kiện bắt đầu giọng nói. Điều này giúp lọc bỏ những tiếng ồn ngắn không nên được coi là giọng nói, để đảm bảo chỉ có hoạt động giọng nói kéo dài mới được nhận dạng. Giá trị mặc định cho Minimum Speech Duration là 300 mili giây.
- 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);
Thời lượng im lặng
Tham số Silence Duration thiết lập khoảng thời gian im lặng cần thiết để kích hoạt sự kiện kết thúc giọng nói. Điều này ngăn việc phát hiện giọng nói kết thúc sớm trong các khoảng dừng tự nhiên giữa các từ hoặc câu. Giá trị mặc định cho Silence Duration là 500 milliseconds.
- 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);
Ràng buộc với Speech Delegates
Bạn có thể liên kết đến các delegate cụ thể khi lời nói bắt đầu hoặc kết thúc. Điều này hữu ích để kích hoạt hành vi tùy chỉnh dựa trên hoạt động lời nói, chẳng hạn như bắt đầu hoặc dừng nhận dạng văn bản, hoặc điều chỉnh âm lượng của các nguồn âm thanh khác.
- 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
});
So sánh các nhà cung cấp VAD
- Mặc định VAD
- Silero VAD
VAD mặc định (libfvad)
Ưu điểm:
- Nhẹ và hiệu quả
- Hoạt động trên mọi nền tảng
- Sử dụng tài nguyên tối thiểu
- Phù hợp cho thiết bị di động và thiết bị tiêu thụ điện năng thấp
Tốt nhất cho:
- Phát hiện giọng nói đơn giản trong môi trường yên tĩnh
- Ứng dụng di động
- Dự án ưu tiên hiệu suất
- Khi cần hỗ trợ đa nền tảng
Silero VAD
Ưu điểm:
- Độ chính xác cao hơn trong việc phát hiện giọng nói
- Khả năng chịu nhiễu vượt trội trong các môi trường khó khăn
- Kết quả nhất quán hơn giữa các người nói khác nhau
- Các tùy chọn cấu hình nâng cao để kiểm soát chính xác
Tốt nhất cho:
- Ứng dụng yêu cầu phát hiện giọng nói chính xác
- Môi trường có tiếng ồn nền
- Hệ thống nhận dạng giọng nói
- Ứng dụng âm thanh chuyên nghiệp
Silero VAD có thể yêu cầu nhiều tài nguyên tính toán hơn so với VAD mặc định.