Chuyển tới nội dung chính

Streaming Sound Wave

Streaming Sound Wave là một loại sóng âm thanh được nhập hỗ trợ thêm dữ liệu âm thanh một cách động, ngay cả trong khi phát. Nó cung cấp chức năng tương tự như sóng âm thanh được nhập, ví dụ: tua lại và có thể được sử dụng trong SoundCues, v.v.

mẹo

Để phát hiện hoạt động giọng nói (VAD), hãy tham khảo trang này.

Tạo một streaming sound wave

Trước tiên, bạn nên tạo một streaming sound wave. Xin lưu ý rằng bạn nên coi nó như một tham chiếu mạnh để ngăn chặn việc hủy sớm (ví dụ: bằng cách gán nó cho một biến riêng trong Blueprints hoặc sử dụng UPROPERTY() trong C++).

Create Streaming Sound Wave node

Phát lại sóng âm thanh

Sau đó, bạn có thể phát lại sóng âm thanh đó. Tuy nhiên, không cần thiết phải làm điều này ngay bây giờ, bạn có thể bắt đầu phát sóng âm thanh sau.

Các ví dụ khác nhau về phát sóng âm thanh

Phân bổ trước dữ liệu âm thanh

Tùy chọn, bạn có thể phân bổ trước dữ liệu âm thanh (bytes) để tránh việc cấp phát lại toàn bộ bộ đệm PCM mỗi khi dữ liệu âm thanh mới được thêm vào.

Nút Phân bổ trước Dữ liệu Âm thanh

Thêm dữ liệu âm thanh

Để thêm dữ liệu âm thanh vào cuối bộ đệm hiện có, hãy sử dụng các hàm thích hợp để thêm dữ liệu âm thanh một cách động. Việc phát lại sẽ tuân theo trình tự hàng đợi của các lần thêm này.

Nút Thêm dữ liệu âm thanh

Tránh phát lại âm thanh bị tăng tốc hoặc méo tiếng

Khi truyền phát dữ liệu âm thanh trong khi sóng âm đang phát, bạn có thể gặp phải tình trạng phát lại âm thanh bị tăng tốc hoặc méo tiếng trong một số trường hợp cụ thể. Vấn đề này thường xảy ra khi:

  1. Quá trình phát sóng âm gần/kết thúc bộ đệm hiện tại
  2. Dữ liệu âm thanh mới liên tục được xếp hàng đợi vào sóng âm truyền phát
  3. Quá trình phát bắt kịp luồng dữ liệu đến

Bạn có thể dừng việc điền dữ liệu âm thanh bất kỳ lúc nào mà không gặp vấn đề. Tuy nhiên, đối với các tình huống yêu cầu truyền phát liên tục (chẳng hạn như truyền phát âm thanh thời gian thực), có hai cách tiếp cận tùy thuộc vào độ tin cậy của việc truyền phát dữ liệu âm thanh của bạn:

Đối với truyền phát đáng tin cậy, nhất quán: Sử dụng ủy quyền OnPopulateAudioState để bắt đầu phát lại ngay sau khi chunk dữ liệu đầu tiên được nhận.

Đối với truyền phát không đáng tin cậy (sự cố mạng, dữ liệu không liên tục): Thêm một độ trễ bổ sung ngay cả sau khi OnPopulateAudioState được kích hoạt để xây dựng một bộ đệm lớn hơn trước khi bắt đầu phát lại.

Sử dụng OnPopulateAudioState để tránh sự cố phát lại

Lưu ý: Bạn có thể ngừng thêm dữ liệu âm thanh bất kỳ lúc nào mà không gây ra sự cố phát lại. Cách tiếp cận chính xác phụ thuộc vào độ tin cậy của luồng dữ liệu âm thanh của bạn - sử dụng phát lại ngay lập tức cho các luồng ổn định hoặc thêm độ trễ đệm bổ sung cho các luồng không đáng tin cậy (ví dụ: sự cố kết nối mạng).

Ví dụ sử dụng

Cuối cùng, quá trình triển khai của bạn có thể trông như thế này:

Một ví dụ về việc sử dụng sóng âm thanh phát trực tuyến

On Populate Audio State

Delegate OnPopulateAudioState hoạt động tương tự như OnPopulateAudioData nhưng không phát sóng dữ liệu âm thanh đã được điền. Điều này có thể hữu ích khi bạn muốn theo dõi thời điểm dữ liệu âm thanh được điền mà không cần truyền một mảng dữ liệu âm thanh đã được điền, giúp cải thiện hiệu suất.

On Populate Audio State delegate

Làm việc với Dữ liệu PCM

Để truy cập dữ liệu PCM theo thời gian thực trong quá trình phát lại, hãy xem Xử lý Dữ liệu PCM.