Khử Tiếng Vọng Âm Thanh
Streaming Sound Wave, cùng với các loại dẫn xuất của nó như Capturable Sound Wave, hỗ trợ Khử Tiếng Vọng Âm Thanh (AEC). AEC loại bỏ tiếng vọng khỏi âm thanh microphone được thu gây ra bởi việc phát lại tín hiệu render (ví dụ: âm thanh phát qua loa). Kết quả là thu giọng nói sạch hơn trong các tình huống giao tiếp thời gian thực.
Plugin cung cấp AEC thông qua triển khai WebRTC AEC3, có sẵn dưới dạng plugin mở rộng nhẹ chỉ cung cấp mã AEC3 liên quan. WebRTC AEC3 là bộ khử tiếng vọng âm thanh chất lượng cao được sử dụng rộng rãi trong các ứng dụng giao tiếp thời gian thực. Nó mô hình hóa đường dẫn âm thanh giữa loa và microphone để trừ tiếng vọng khỏi tín hiệu đã thu.
Cài Đặt
Để sử dụng Khử Tiếng Vọng Âm Thanh, bạn cần cài đặt plugin mở rộng WebRTC AEC3:
- Đảm bảo plugin Runtime Audio Importer đã được cài đặt trong dự án của bạn
- Tải plugin mở rộng WebRTC AEC3 từ đây
- Giải nén thư mục từ tệp lưu trữ đã tải vào thư mục
Pluginscủa dự án (tạo thư mục này nếu nó chưa tồn tại) - Xây dựng lại dự án của bạn (phần mở rộng này yêu cầu dự án C++)
- WebRTC AEC3 hỗ trợ tất cả các phiên bản engine được Runtime Audio Importer hỗ trợ (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)
- Phần mở rộng này được cung cấp dưới dạng mã nguồn và yêu cầu dự án C++ để sử dụng
- WebRTC AEC3 có sẵn cho Windows, Linux, Mac, Android (bao gồm Meta Quest) và iOS
- Để 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
Sử Dụng Cơ Bản
Quy trình AEC điển hình bao gồm ba bước:
- Bật AEC trên sound wave streaming/capturable của bạn
- Cấu hình kích thước chunk render trên sound wave render để phân phối khung 10 ms
- Gắn kết sound wave render có âm thanh sẽ được sử dụng để hủy tiếng vọng khỏi tín hiệu thu
Bật AEC
Để bật AEC sau khi tạo streaming sound wave, hãy sử dụng hàm ToggleAEC. Bạn phải chỉ định tốc độ mẫu và số kênh cho bộ xử lý AEC. Nếu âm thanh thu hoặc render đến không khớp với các giá trị này, nó sẽ được lấy mẫu lại tự động, tuy nhiên, tốc độ mẫu được cấu hình vẫn ảnh hưởng đến chất lượng (ví dụ: 48000 Hz sẽ mang lại khử tiếng vọng tốt hơn 16000 Hz) và hiệu suất, vì vậy đáng để chọn các giá trị này một cách có chủ đích thay vì để việc lấy mẫu lại xử lý.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleAEC(true, 48000, 1);
Bạn có thể kiểm tra xem AEC hiện có được bật hay không:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
bool bEnabled = StreamingSoundWave->IsAECEnabled();
Cấu hình Kích thước Khối Kết xuất
WebRTC AEC3 yêu cầu âm thanh phải được xử lý trong các khối 10 ms. Để đảm bảo sóng âm thanh kết xuất phân phối dữ liệu âm thanh với kích thước khung hình chính xác, hãy sử dụng hàm SetNumSamplesPerChunk trên Sóng Âm thanh Đã Nhập kết xuất (sóng âm thanh đang được phát qua loa).
Công thức để tính số lượng mẫu chính xác cho mỗi khối là:
Ví dụ, đối với âm thanh 48000 Hz: 48000 / 100 = 480 mẫu mỗi khối.
- Blueprint
- C++

// Assuming ImportedSoundWave is a UE reference to a UImportedSoundWave object (the render sound wave being played through speakers)
ImportedSoundWave->SetNumSamplesPerChunk(ImportedSoundWave->GetSampleRate() / 100);
Ràng buộc Render Sound Wave
Sau khi bật AEC và cấu hình kích thước chunk, hãy ràng buộc render sound wave mà âm thanh của nó sẽ được sử dụng để xác định và loại bỏ tiếng vọng khỏi tín hiệu thu. Đây thường là sound wave đang được phát qua loa mà microphone có thể thu được:
- Blueprint
- C++

// Assuming StreamingSoundWave is the capture sound wave (microphone input) with AEC enabled
// (can also be a UCapturableSoundWave, which is the most common use case)
// Assuming ImportedSoundWave is the render sound wave being played through speakers
StreamingSoundWave->BindAECToSoundWavePlayback(ImportedSoundWave);
Để hủy liên kết render sound wave:
- Blueprint
- C++

// Assuming StreamingSoundWave is the capture sound wave (microphone input) with AEC enabled
// (can also be a UCapturableSoundWave, which is the most common use case)
// Assuming ImportedSoundWave is the render sound wave being played through speakers
StreamingSoundWave->UnbindAECFromSoundWavePlayback(ImportedSoundWave);
Cấu hình Bổ sung
Độ trễ Luồng
Bạn có thể đặt độ trễ luồng ước tính (tính bằng mili giây) giữa đường dẫn âm thanh kết xuất và thu âm. Điều này tính đến độ trễ của phần cứng và hệ thống, mặc dù WebRTC AEC3 có thể tự động ước tính điều này trong nhiều trường hợp:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->SetAECStreamDelay(50);
Đặt lại AEC
Bạn có thể đặt lại trạng thái bộ xử lý AEC nội bộ bất kỳ lúc nào, xóa mọi mô hình tiếng vọng đã tích lũy:
- Blueprint
- C++

StreamingSoundWave->ResetAEC();
WebRTC AEC3 hỗ trợ các tốc độ mẫu 8000, 16000, 32000 và 48000 Hz. Âm thanh không khớp sẽ được lấy mẫu lại tự động, nhưng điều này đi kèm với chi phí hiệu suất. Để có chất lượng và hiệu suất tốt nhất, hãy sử dụng 48000 Hz và khớp với cấu hình âm thanh thực tế của cả luồng thu và luồng phát.