Xác định âm thanh của AudioClip lớn như thế nào


10

Tôi có một số mã sử dụng GetSpectrumDatatừ AudioSource đang phát một bài hát để tạo bố cục cấp độ cho trình phát để phát. Tôi muốn thêm một chức năng nơi người chơi có thể tải lên các bài hát của riêng họ và chơi các cấp được tạo bằng dữ liệu từ các bài hát này. Thật không may, khi so sánh các tệp âm thanh khác nhau, tôi đã gặp phải điều này:

nhập mô tả hình ảnh ở đây

Như bạn có thể thấy, biên độ thay đổi mạnh mẽ từ clip này sang clip khác, sau đó tạo ra các mức tầm thường để hoàn thành hoặc gần như không thể. Tôi muốn tìm một cách để xác định "độ ồn" này để tôi có thể giảm âm lượng hoặc khuếch đại nó với hệ số nhân sau khi lấy dữ liệu từ bài hát. Ngoài ra, có cách nào để trích xuất dữ liệu này mà không cần phát bài hát không?

Câu trả lời:


9

Một cách thủ công để làm điều đó là sử dụng AudioClip.GetData để lấy dữ liệu mẫu trong một mảng. Sau đó lặp qua dữ liệu và tìm Quảng trường trung bình gốc để tìm "độ to" của clip âm thanh.

Sau đó, bạn cũng có thể chia tỷ lệ toàn bộ mảng sao cho giá trị tối đa là 1.0f và ghi lại vào audioclip bằng AudioClip.SetData . Điều này được gọi là chuẩn hóa âm thanh và nó làm cho các mẫu có điểm lớn nhất đến âm lượng tối đa. Lưu ý rằng điều này không tính đến nếu các clip âm thanh của bạn có âm lượng rất thấp, nhưng có các đỉnh rất cao. Có nhiều kỹ thuật tiên tiến hơn cho điều đó (ghi chú bên dưới).

Unity cũng đang thực hiện chuẩn hóa tự động theo mặc định. Vì vậy, nếu bạn chưa chạm vào cài đặt nhập, thao tác này được thực hiện tự động và bạn không cần phải lo lắng về nó. Nếu bạn vẫn gặp sự cố mặc dù bạn chắc chắn rằng âm thanh đã được chuẩn hóa, thì có lẽ bạn cần phải nén âm thanh với nén dải động (lưu ý: điều rất khác với nén dữ liệu, không liên quan gì đến kích thước tệp hoặc sử dụng bộ nhớ) phù hợp với nhu cầu của bạn với phần mềm bên ngoài.


Câu trả lời tuyệt vời, sẽ xem xét tất cả những điều này với nhiều chi tiết hơn. Cảm ơn bạn!
Người làm vườn

5
Giá trị tối đa không phải lúc nào cũng là lựa chọn tốt nhất (như bạn đã nói). Các gai lớn rất ngắn (những âm thanh như tiếng click) không có vẻ to như âm thanh liên tục. Nếu bạn muốn độ ồn nhận biết, bạn cần bình phương tất cả các giá trị, trung bình đó, và sau đó lấy căn bậc hai. Làm theo cách này là những gì bình thường hóa, vì vậy hy vọng có một Unity được xây dựng cho nó.
Jezzamon

2
Độ to có liên quan đến năng lượng âm thanh và cách xác định điều này là, như @Jezzamon gợi ý, bằng cách tính bình phương gốc (RMS). dsp.stackexchange.com/questions/2951/loudness-of-pcm-stream
Zac Crites
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.