Dải LED phản ứng âm thanh: Tại sao dự án này lại khó thực hiện đến thế?
Năm 2016, tác giả bắt đầu với ý tưởng đơn giản là làm đèn LED nhịp điệu nhạc, nhưng lại sa vào một hành trình kỹ thuật kéo dài 10 năm. Bài viết tiết lộ những bài học sâu sắc về xử lý tín hiệu, thang đo Mel và lý do tại sao việc ánh sáng hóa âm thanh trên dải LED lại khó hơn nhiều so với màn hình máy tính.

Vào năm 2016, tôi mua một dải LED và quyết định khiến nó phản ứng với âm nhạc theo thời gian thực. Tôi nghĩ rằng sẽ chỉ mất vài tuần, nhưng nó lại trở thành một hành trình kỹ thuật đầy rẫy chông gai. Mười năm sau, dự án này đã đạt 2,8k sao trên GitHub, được Hackaday đưa tin và trở thành một trong những dự án trình diễn LED phổ biến nhất. Mọi người đã lắp đặt nó trong các hộp đêm, tích hợp với Amazon Alexa và sử dụng nó làm dự án điện tử đầu tiên của họ.
Nhưng tôi vẫn chưa thực sự hài lòng với nó.
Hiệu ứng cuộn màu sắc
Âm lượng là dễ, nhưng nhanh chóng nhàm chán
Tôi bắt đầu với các dải LED không có địa chỉ, nơi tôi có thể điều chỉnh độ sáng của các kênh màu đỏ, xanh lá và xanh dương độc lập, nhưng không thể điều khiển từng pixel LED riêng lẻ. Tôi đã thử cách rõ ràng nhất: đọc tín hiệu âm thanh, đo âm lượng và làm cho LED sáng hơn khi nhạc to hơn. Đây là các phương pháp xử lý miền thời gian (time domain) khá đơn giản. Đọc một đoạn âm thanh ngắn khoảng 10-50ms, lọc thông thấp (low pass filter) và ánh xạ cường độ sang độ sáng.
Tôi gán mỗi kênh màu cho một hằng số thời gian khác nhau để tạo ra hiệu ứng màu sắc. Một màu phản ứng nhanh với sự thay đổi âm lượng, một màu phản ứng chậm và một màu ở mức trung bình. Bạn có thể khiến thứ này hoạt động trong một buổi chiều và nó trông ổn trên một dải LED hoặc đèn với một LED RGB duy nhất.
Tuy nhiên, nó nhanh chóng trở nên nhàm chán. Mọi thông tin tần số thú vị đều bị mất và nó chỉ hoạt động tốt với nhạc điện tử có nhịp điệu mạnh. Nó kinh khủng với nhiều loại nhạc khác nơi âm lượng không phải là đặc điểm thú vị nhất. Hệ thống không hiểu loại âm thanh nào nó đang phản ứng, chỉ biết nó to đến mức nào.
Tôi cũng phải triển khai điều khiển độ khuếch đại thích ứng (adaptive gain control) gần như ngay lập tức. Nếu bạn đặt ngưỡng âm lượng cố định, bộ trình thị sẽ bị bão hòa ở phòng ồn hoặc hầu như không nhấp nháy ở phòng yên tĩnh.
Cái bẫy của FFT và sự khan hiếm Pixel
Bước tiếp theo rõ ràng là sử dụng các phương pháp miền tần số (frequency domain). Thu thập một đoạn âm thanh ngắn, tính toán biến đổi Fourier (FFT - công cụ toán học phân tách âm thanh thành các tần số riêng lẻ), lấy các thùng tần số (frequency bins) và ánh xạ chúng sang LED. Tôi có 144 pixel trên một dải dài một mét, nên tôi nghĩ: 144 thùng, một thùng cho mỗi LED. Sau đó hiển thị phổ âm.
Nó hoạt động một cách miễn cưỡng. Tôi có thể nhận ra ngay rằng nhiều âm thanh hơn đang được bắt giữ so với phương pháp đo âm lượng. Nhưng kết quả rất không thỏa mãn. Hầu hết năng lượng tập trung vào một vài LED, và phần lớn dải LED bị tối.
Hầu hết những người cố gắng làm dải LED phản ứng âm thanh đều dừng lại ở đây với phương pháp FFT ngây thơ này. Nó hoạt động tốt trên màn hình, nơi bạn có hàng triệu pixel và có thể hiển thị phổ âm với nhiều chi tiết. Nhưng trên 144 LED, những hạn chế là rất khắc nghiệt. Trên dải LED, bạn không thể "lãng phí" bất kỳ pixel nào.
Mẫu hình ảnh minh họa
Tôi gọi hiện tượng này là "Sự khan hiếm Pixel" (Pixel Poverty). Một dải LED một mét có thể có 144 LED. Đó là tất cả, và không có chỗ nào để ẩn nấp. Gần như mọi pixel đơn lẻ phải làm điều gì đó mà con người cảm thấy có liên quan đến âm nhạc. Biên độ sai lệch là vô cùng hẹp.
Đây là điều khiến trình thị LED về cơ bản khó hơn nhiều so với trình thị dựa trên màn hình. Tôi không thể chỉ hiển thị dữ liệu xử lý tín hiệu thô. Tôi phải hiểu cách con người thực sự cảm nhận âm nhạc và xây dựng một mô hình nhận thức vào quy trình.
Thang đo Mel: Bước đột phá
Tôi bắt đầu đọc các bài báo từ lĩnh vực nhận dạng giọng nói để hiểu cách các đường ống xử lý tín hiệu của họ hoạt động. Nhận dạng giọng nói đã dành hàng thập kỷ để tìm cách trích xuất các đặc điểm từ âm thanh khớp với nhận thức của con người. Đó là nơi tôi tìm thấy thang đo Mel.
Con người không cảm nhận cao độ theo tuyến tính. Khoảng cách nhận thức giữa 200Hz và 400Hz cảm thấy lớn hơn nhiều so với khoảng cách giữa 8000Hz và 8200Hz, mặc dù cả hai khoảng cách đều là 200Hz. Não bộ của chúng ta được điều chỉnh mạnh mẽ cho dải giọng nói khoảng 300Hz đến 3000Hz.
Thang đo Mel chuyển đổi tần số từ Hz thành một không gian nhận thức nơi các cao độ cách đều nhau đối với người nghe. Thay vì ánh xạ các thùng FFT thô sang pixel (làm lan tỏa các tần số quan trọng về mặt nhận thức chỉ trên vài LED), tôi ánh xạ các thùng theo thang Mel sang pixel.
Sự khác biệt là ngày và đêm. Cả dải LED đều sáng lên. Mọi LED đều đang làm điều gì đó có ý nghĩa. Đó là bước đột phá. Mọi thứ khác được xây dựng dựa trên nền tảng đó.
Làm mượt, Nhấp nháy và Tích chập
Thang đo Mel đã giải quyết vấn đề ánh xạ tần số, nhưng đầu ra thô vẫn bị nhấp nháy nặng. Các đặc điểm thay đổi quá nhanh và dải LED trông rung rinh và khó chịu. Tôi cần trình thị trơn tru và có chủ đích, không phải nhiễu.
Tôi đã áp dụng làm mượt theo cấp số nhân (exponential smoothing) ở cấp độ từng thùng tần số, sao cho mỗi khung hình hòa trộn với khung trước đó. Các đặc điểm thay đổi dần dần thay vì nhảy xung quanh. Điều này loại bỏ sự nhấp nháy mà không thêm độ trễ đáng kể.
Sau đó, tôi phát hiện ra rằng tích chập (convolutions) — một phép toán toán học hòa trộn các giá trị lân cận với nhau — hoàn hảo cho việc làm mượt không gian. Dải LED là các vectơ 1D, khiến chúng trở thành chất nền lý tưởng cho các phép toán tích chập. Các hạt nhân (kernels) khác nhau mang lại cho tôi các hiệu ứng khác nhau: hạt nhân hẹp cho hoạt động kiểu max trên các pixel lân cận, hạt nhân rộng hơn cho làm mờ Gaussian.
Hệ thống hoạt động trong thực tế
Cả hai phía của sự nhận thức
Tại thời điểm này, tôi nhận ra trình thị cần các mô hình nhận thức ở cả hai phía của đường ống. Ở phía đầu vào, thang đo Mel mô hình hóa cách con người cảm nhận âm thanh. Ở phía đầu ra, tôi cần mô hình hóa cách con người cảm nhận ánh sáng.
Chúng ta không cảm nhận độ sáng theo tuyến tính. Ánh xạ tuyến tính thô năng lượng âm thanh sang độ sáng LED trông sai vì mắt chúng ta có phản ứng logarith. Điều này dẫn tôi đến hiệu chỉnh Gamma (gamma correction) và lý thuyết màu sắc: RGB, HSV, LAB, sRGB, màu bổ sung.
Kiến trúc và Cộng đồng
Dự án hỗ trợ hai nền tảng chính. Trên Raspberry Pi, Pi xử lý cả xử lý âm thanh và kết xuất LED qua GPIO. Trên ESP8266, xử lý âm thanh chạy trên PC bằng Python và dữ liệu pixel được truyền trực tiếp đến vi điều khiển.
Toàn bộ dự án có sẵn miễn phí tại GitHub. Nó đã trở nên phổ biến một cách bất ngờ, được sử dụng bởi hàng ngàn người, từ những người mới bắt đầu học hàn đến các kỹ sư âm thanh chuyên nghiệp tại hộp đêm.
Một người dùng tên Joey Babcock đã gửi pull request sớm và trở thành người bảo trì đầu tiên ngoài tôi. Một người khác, Richard Birkby, đã tích hợp dự án với Amazon Echo. Một kỹ sư tại một câu lạc bộ đêm đã gửi video dải LED hoạt động trong đêm DJ, với hàng chục người đang nhảy trước ban nhạc trực tiếp.
Điều gì vẫn còn thiếu
Khi một con người mã thủ công chuỗi hoạt ảnh cho một bài hát cụ thể, kết quả thật lộng lẫy. Mỗi nhịp và đoạn drop đều được tính thời gian hoàn hảo. Kết quả mã thủ công đó là tiêu chuẩn vàng, và trình thị tự động vẫn còn xa mới đạt được điều đó.
Vấn đề lớn nhất chưa được giải quyết là làm cho nó hoạt động tốt trên mọi loại nhạc. Trình thị hoạt động tốt nhất trên nhạc điện tử có nhịp điệu rõ ràng. Nhạc nhiều giọng hát, jazz, piano cổ điển, guitar, violin đều có các đặc điểm tần số và miền thời gian khác nhau. Một đoạn mã không thể hoạt động tốt trên tất cả chúng.
Tôi nghĩ tương lai của trình thị âm thanh trên dải LED sẽ liên quan đến sự kết hợp của các chuyên gia được tinh chỉnh cho các thể loại khác nhau, có khả năng sử dụng mạng nơ-ron. Tôi có ý tưởng tạo ra tập dữ liệu huấn luyện bằng cách nghe nhạc trong khi giữ một gia tốc kế, và sử dụng mối quan hệ giữa tín hiệu âm thanh và phản ứng vật lý của cơ thể để huấn luyện trình thị dựa trên AI.
Tôi bắt đầu đây là một dự án LED vui vẻ. Tôi kết thúc việc dành nhiều năm để học cách con người cảm nhận cao độ, cách làm mượt tín hiệu nhiễu, cách mắt chúng ta phản ứng với độ sáng và sự khó khăn của việc ánh xạ âm thanh sang ánh sáng qua một nút thắt nghèo pixel. Đây là thứ khó khăn nhất tôi từng xây dựng, và tôi vẫn chưa xong với nó.
Bài viết liên quan

Công nghệ
Meta đổ lỗi cho thiếu hụt RAM khi tăng giá 100 USD cho tai nghe Quest 3
16 tháng 4, 2026

Công nghệ
Máy tính góc cơ điện tử bên trong hệ thống theo dõi sao của máy bay ném bom B-52
18 tháng 4, 2026
Công nghệ
Fuzix OS 0.4 chính thức phát hành: Cải tiến mạng, định dạng tệp và hỗ trợ phần cứng phong phú
18 tháng 4, 2026
