Khám phá Glass và Glass-evo: Bộ đôi Plugin hiển thị đồng hồ VU Meter và giao diện Hi-End cho Volumio

Sau khi phát hành thành công bản port Volumio 4.0 cho Beelink GT-King Pro S922X-H, biến chiếc Android TV Box thành một Music Server Audiophile chuyên dụng với DAC kép ESS SABRE ES9018 và ngõ xuất âm thanh bit-perfect, tác giả tiếp tục hành trình tối ưu hóa trải nghiệm nghe nhìn cho hệ thống phát nhạc số. Trong quá trình tìm kiếm một giải pháp hiển thị đồng hồ đo âm lượng VU Meter kim vẩy vừa cổ điển, vừa hiện đại để xuất tín hiệu hình ảnh qua cổng HDMI lên TV phòng khách, tác giả đã tình cờ khám phá ra hệ sinh thái Glass và Glass-evo - một dự án phần mềm mang tính cách mạng cho cộng đồng người dùng Volumio toàn cầu.
Bài viết này là bản phân tích kỹ thuật chuyên sâu và ghi chép trải nghiệm thực tế về bộ đôi plugin Glass và Glass-evo, lý giải vì sao kiến trúc phần mềm mới viết bằng ngôn ngữ Rust này lại vượt trội hoàn toàn so với tượng đài PeppyMeter Screensaver trước đây.
1. Sự sụp đổ của PeppyMeter Screensaver và bài toán hiệu năng
Đối với những ai từng chơi Volumio hoặc tự dựng các bộ Music Server DIY, tiện ích PeppyMeter Screensaver đã từng là tiêu chuẩn vàng để mang lại những chiếc đồng hồ kim vẩy sống động, hoài niệm của các thương hiệu âm thanh huyền thoại như McIntosh, Accuphase, Marantz hay Technics. Tuy nhiên, sau nhiều năm phát triển, PeppyMeter đã chính thức chạm tới giới hạn kiến trúc phần mềm của mình.
Như thông báo chính thức từ lập trình viên nerd (foonerd) trên diễn đàn cộng đồng tại bài viết PLUGIN Glass - Phoenix risen from the PeppyMeter Screensaver ashes, phiên bản PeppyMeter Screensaver 3.5.0 “Guard Engine” chính là bản phát hành cuối cùng, đánh dấu sự ngừng phát triển vĩnh viễn của dự án này.
Những điểm nghẽn kỹ thuật chí mạng của PeppyMeter:
- Gánh nặng từ Python và Pygame: PeppyMeter được xây dựng trên ngôn ngữ kịch bản Python và thư viện đồ họa pygame (vốn là wrapper của SDL thế hệ cũ). Khi vẽ các giao diện đồ họa phức tạp với các kim đồng hồ quay liên tục ở tần số quét cao, Python phải liên tục xử lý rác (garbage collection) và tiêu tốn lượng tài nguyên khổng lồ.
- Chiếm dụng CPU và RAM nghiêm trọng: Theo các đo đạc thực nghiệm trên Raspberry Pi 5 xuất màn hình độ phân giải 1280x720 ở 30 khung hình/giây (FPS):
- PeppyMeter ngốn tới 70% năng lực xử lý của một nhân CPU.
- Bộ nhớ RAM tiêu thụ vượt ngưỡng 1.030 MB (>1 GB RAM).
- Ảnh hưởng trực tiếp đến chất lượng phát âm thanh (Audio Stuttering): Trên các bo mạch nhúng hạn chế tài nguyên như Raspberry Pi 3, Pi Zero 2 W hoặc các TV Box có bộ nhớ RAM 2GB, việc PeppyMeter chiếm dụng tài nguyên quá mức thường xuyên dẫn đến hiện tượng nghẽn bộ đệm ALSA (ALSA underrun), gây ra tiếng nổ bụp, vấp đĩa hoặc méo tiếng khi giải mã các tệp tin âm thanh Hi-Res 24-bit/192kHz hay DSD dung lượng cao.
2. Sự trỗi dậy của Glass: Phượng hoàng hồi sinh bằng ngôn ngữ Rust
Từ những hạn chế của PeppyMeter, dự án Glass trên GitHub đã được xây dựng lại hoàn toàn từ con số không (greenfield project) bằng ngôn ngữ lập trình hệ thống Rust. Không một dòng mã nào từ vòng lặp vẽ cũ của Python được giữ lại, nhưng Glass duy trì khả năng tương thích 100% với định dạng theme phong phú sẵn có của PeppyMeter.
Bảng so sánh hiệu năng thực tế giữa PeppyMeter và Glass:
| Tiêu chí kỹ thuật | PeppyMeter Screensaver (Bản 3.5.0) | Glass Engine (Rust Native) | Mức độ cải thiện |
|---|---|---|---|
| Ngôn ngữ phát triển | Python + pygame | Rust thuần (Zero-cost abstractions) | Tối ưu hóa ở mức nhị phân |
| Tải CPU (Raspberry Pi 5, 720p @ 30 FPS) | ~70% (1 CPU core) | ~38% (1 CPU core) | Giảm gần 50% tải xử lý |
| Mức tiêu thụ bộ nhớ RAM | ~1.030 MB RAM | ~122 MB RAM | Tiết kiệm gần 90% bộ nhớ (chỉ bằng 1/10) |
| Độ trễ phản hồi kim vẩy | Có độ trễ do GIL của Python | Thời gian thực, bám sát biên độ mili-giây | Mượt mà tuyệt đối 30 - 60 FPS |
| Tác động chuỗi âm thanh (ALSA) | Chặn luồng hoặc capture gián tiếp | Audio tap thụ động glasstap bit-perfect |
Đảm bảo 100% Bit-Perfect |
| Khả năng chạy trên phần cứng yếu | Yêu cầu tối thiểu Pi 4 (4GB RAM) | Chạy tốt trên Pi 3, Pi Zero 2 W, TV Box Amlogic, PC x86 | Phổ phần cứng cực rộng |
Nhờ kiến trúc quản lý bộ nhớ không cần bộ thu gom rác (Garbage Collector) của Rust kết hợp với khả năng tối ưu hóa luồng nhị phân, Glass mang lại tốc độ hiển thị khung hình ổn định từ 30 đến 60 FPS mà không hề gây nóng máy hay ảnh hưởng tới các dịch vụ âm thanh cốt lõi của Volumio.
3. Phân tích kiến trúc kỹ thuật của Glass Engine
Sức mạnh và sự ổn định của Glass đến từ cấu trúc phân rã module bài bản được thiết kế chuyên biệt cho hệ sinh thái phát nhạc số:
flowchart LR
subgraph VolumioPlayer ["Thiết bị phát Volumio (GT-King Pro / Raspberry Pi)"]
A["Nguồn phát nhạc\n(Tidal, Spotify, DSD, FLAC)"] --> B["glasstap\n(ALSA PCM Tap Plugin)"]
B --> C["Ngõ ra phần cứng\n(DAC ES9018, SPDIF, HDMI)"]
B -- "Zero-Copy Data" --> D[("Vòng đệm Shared Memory\n/dev/shm")]
D --> E["Glass Native Renderer\n(SDL2 / DRM / KMS)"]
D --> F["glass-serve\n(UDP Broadcast Daemon)"]
G["Volumio Plugin Backend\n(State, Metadata, Config)"] --> E
G --> H["Web Manager\nPort 5582"]
end
F -- "UDP Stream (Port 5583)" --> I["Glass Remote\n(Android / Windows / Linux)"]
G -- "TCP Controls" --> I
H -- "WebAssembly (glass-face)" --> K["Trình duyệt Web / Anymote"]
E --> L["Màn hình HDMI TV / DSI Display"]
3.1. Bộ trích xuất âm thanh độc quyền glasstap: Bảo toàn Bit-Perfect tuyệt đối
Một trong những lo ngại lớn nhất của giới Audiophile khi sử dụng screensaver hiển thị kim vẩy là việc tín hiệu âm thanh bị can thiệp làm suy giảm chất lượng (resampling hoặc dither).
Glass giải quyết triệt để vấn đề này bằng module glasstap (crates/tap):
glasstaplà một ALSA PCM plugin cắm trực tiếp vào đầu chuỗi âm thanh (ALSA chain) của Volumio.- Nguyên lý hoạt động Byte-for-Byte: Toàn bộ dòng dữ liệu âm thanh số (PCM từ 16-bit/44.1kHz đến 32-bit/768kHz, DoP và native DSD) đều đi qua
glasstapnguyên vẹn 100% từng byte đến chip DAC (như ESS ES9018K2M trên Beelink GT-King Pro) mà không chịu bất kỳ tác động nào về biên độ sóng âm. - Bộ nhớ chia sẻ
/dev/shm: Thay vì ghi tệp tin tạm ra thẻ nhớ gây nghẽn I/O,glasstapkhởi chạy một luồng đọc riêng (dedicated thread) để đo biên độ tín hiệu và đẩy kết quả vào bộ đệm vòng (ring buffer) nằm trực tiếp trên bộ nhớ RAM chia sẻ/dev/shm. Nhờ đó, engine hiển thị đồ họa có thể đọc dữ liệu tức thì mà không tạo ra bất kỳ độ trễ hay xung đột khóa luồng nào với bộ đệm âm thanh chính.
3.2. Cấu trúc crate Rust chuyên biệt:
lead: Chịu trách nhiệm phân tích cú pháp tệp tin cấu hình và giải mã cấu trúc theme PeppyMeter thành mô hình hình học skin (tọa độ kim, dải góc quay, kích thước mặt số).intake: Thu nạp và đồng bộ hóa đa nguồn dữ liệu thời gian thực: dữ liệu nhịp vẩy từ/dev/shm, thông tin bản nhạc đang phát (metadata), ảnh bìa đĩa (album art), ảnh nền ca sĩ (fanart) và trạng thái kết nối remote.plot: Tầng xử lý hình học thuần túy (pure geometry function). Tính toán vị trí chính xác của từng pixel, góc nghiêng của kim vẩy và thanh đo quang phổ. Tầng này hoàn toàn độc lập với phần cứng hiển thị, cho phép chạy kiểm thử đơn vị tự động (unit tests) mà không cần mở cửa sổ đồ họa.expose: Tầng rasterize đồ họa thông minh. Chỉ vẽ lại các vùng ảnh có sự thay đổi thực sự (dirty rectangles) thay vì render lại toàn bộ khung hình, giảm tải tối đa cho GPU và RAMDAC.controls: Xử lý tương tác cảm ứng trực tiếp trên màn hình: phân vùng bấm phím ảo, thao tác vuốt trượt âm lượng và gửi lệnh điều khiển ngược lại cho Volumio.bank: Bộ phân tích quang phổ âm thanh đa kênh (Spectrum Analyser). Hỗ trợ tính toán biến đổi Fourier nhanh (FFT) chồng lấn với tối đa 256 dải tần mỗi kênh theo thang Logarithmic, Mel hoặc Linear, tích hợp cơ chế giữ đỉnh (peak hold) sắc nét.
4. glass-evo: Giao diện người dùng Hi-End thế hệ mới không cần trình duyệt Kiosk
Bên cạnh plugin hiển thị màn hình nền Glass, nhà phát triển foonerd còn giới thiệu dự án glass-evo trên GitHub - một thành phần chủ chốt trong hệ sinh thái evo framework.
Trên các hệ điều hành Volumio tiêu chuẩn, việc hiển thị giao diện lên màn hình cảm ứng gắn ngoài (Touch Display) thường phụ thuộc vào trình duyệt Chromium chạy ở chế độ Kiosk. Đây là gánh nặng lớn: Chromium ngốn hàng trăm megabyte RAM, khởi động chậm chạp và tiêu hao đáng kể điện năng.
glass-evo mang đến bước nhảy vọt toàn diện:
- Loại bỏ hoàn toàn trình duyệt Kiosk: glass-evo giao tiếp trực tiếp với hệ thống đồ họa cấp thấp của nhân Linux thông qua thư viện SDL2 kết hợp driver phần cứng DRM/KMS (Direct Rendering Manager / Kernel Mode Setting) và Panfrost GPU trên SoC Amlogic. Khi kích hoạt glass-evo, Volumio sẽ tự động tắt tiến trình trình duyệt Kiosk, trả lại tài nguyên quý giá cho hệ thống.
- Thanh điều khiển cảm ứng trực tiếp (Touch Control Bar): Khi chạm vào màn hình cảm ứng, một thanh điều khiển mờ tinh xảo sẽ xuất hiện theo ngữ cảnh: nút Play/Pause, chuyển bài (Previous/Next), tăng/giảm âm lượng, phím tắt Mute (chạm giữ giảm âm lượng) và bảng mở rộng (lặp lại bài hát, phát ngẫu nhiên).

- Hiệu ứng Kính Mờ (Frosted Glass) thích ứng thông minh: Tận dụng thuật toán trích xuất bảng màu từ ảnh bìa album (artwork color palette extraction), nền kính mờ và các vệt sáng của phím bấm trên giao diện glass-evo sẽ tự động biến đổi tông màu theo gam màu chủ đạo của đĩa nhạc đang phát. Trải nghiệm thị giác trong phòng nghe nhạc trở nên đồng điệu, nghệ thuật và đậm chất Hi-End.
- Màn hình nhàn rỗi nghệ thuật (Idle Screen): Khi dừng phát nhạc, màn hình không bị tối đen vô hồn mà chuyển sang chế độ hiển thị thông tin thư giãn:
- Tùy chọn 4 kiểu đồng hồ kim vẩy cổ điển (Analog Dial), đồng hồ lật (Flip Clock) hoặc đồng hồ số LED 7-segment / 16-segment hoài niệm.
- Hiển thị ngày tháng và dự báo thời tiết trực quan được bố trí linh hoạt trên lưới 9 ô (9-cell grid layout).
5. Trải nghiệm thực tế trên Beelink GT-King Pro: Web Manager và Remote không dây
Trải nghiệm thực tế Glass trên bo mạch Beelink GT-King Pro chạy Volumio 4.0 chứng minh sự kết hợp hoàn hảo giữa phần cứng âm thanh đỉnh cao và engine đồ họa hiện đại.

5.1. Web Manager tại cổng http://<ip-thiết-bị>:5582
Không chỉ hiển thị qua cổng HDMI ra TV phòng khách, người dùng có thể quản trị toàn diện hệ thống từ bất kỳ trình duyệt web nào:
- Tab Live Preview: Xem trực tiếp hình ảnh màn hình đang phát và chuyển động của kim VU trên điện thoại với độ trễ cực thấp.
- Tab Catalog: Duyệt kho giao diện cộng đồng với hơn 200 theme đồ họa đa dạng, cho phép tải và kích hoạt ngay lập tức chỉ với 1 cú nhấp chuột mà không cần giải nén thủ công qua SSH.
- Tab Face (WebAssembly): Tích hợp module nhị phân
glass-facebiên dịch trực tiếp sang WebAssembly (WASM). Bạn có thể mở đồng hồ kim vẩy chạy trực tiếp trong tab trình duyệt máy tính với độ mượt mà tương đương màn hình gốc. - Chế độ Car Dash: Tự động hoán chuyển giao diện Ngày (sáng màu) và Đêm (tối màu, chống chói) dựa theo đồng hồ thời gian thực hoặc chu kỳ bình minh/hoàng hôn.
5.2. Glass Remote tại cổng 5583: Biến điện thoại thành màn hình phụ Hi-End
Đối với những dàn âm thanh đặt trong phòng nghe cách xa màn hình TV, tính năng Glass Remote là một bổ sung vô cùng giá trị:
- Glass tích hợp daemon
glass-serveđẩy luồng khung hình trực tiếp qua giao thức mạng không dây UDP với độ trễ gần như bằng 0. - Bạn có thể cài đặt ứng dụng
glass-android.apklên điện thoại hoặc máy tính bảng Android cũ, đặt lên kệ máy bên cạnh chiếc GT-King Pro. Chiếc điện thoại lúc này sẽ hoạt động như một cụm đồng hồ VU Meter độc lập hoặc đồng bộ hoàn toàn với bản nhạc đang phát. - Trang cài đặt Remote tại cổng 5583 cho phép người dùng tùy chỉnh độc lập theme hiển thị, độ phân giải và giới hạn FPS riêng cho màn hình phụ mà không làm ảnh hưởng đến màn hình chính.

5.3. Chiêm ngưỡng các bộ giao diện âm thanh kinh điển
Nhờ sự tối ưu hóa của Glass Engine trên nền tảng Amlogic S922X-H, các bộ skin đồ họa nặng đô nhất đều hiển thị với độ sắc nét tuyệt đối và chuyển động kim vẩy cực kỳ nhạy bén:
Giao diện phỏng Amply Marantz AV Receiver cổ điển
Mặt máy phay xước đen huyền thoại, núm vặn đối xứng, thông số độ phân giải âm thanh 48 kHz / 24-bit cùng cặp kim đo công suất đỉnh Peak Power Level dB kết hợp dải đèn LED đỏ thể thao:

Giao diện phỏng Technics Stereo Integrated Amplifier
Đồng hồ đo biên độ đôi Wide Range Scale Peak Power Meter cỡ lớn chiếm trọn nửa dưới khung hình, cặp kim Trái/Phải vẩy mượt mà theo từng tiết tấu của bản nhạc:

Giao diện phỏng Ampli Accuphase màu vàng Champagne Hi-End
Màu vàng hoàng gia champagne đẳng cấp, logo Accuphase cùng nhãn hiệu Volumio được bài trí tinh xảo. Hai kim vẩy đỏ nhảy múa trên nền đen tương phản, kết hợp đồng hồ điện tử đếm giây hiện đại:

6. Hướng dẫn cài đặt và cấu hình nhanh
Quá trình cài đặt Glass trên hệ điều hành Volumio 4 vô cùng đơn giản thông qua một dòng lệnh duy nhất chạy trên terminal SSH.
Bước 1: Kết nối SSH vào Volumio
Sử dụng công cụ PuTTY, Windows Terminal hoặc macOS/Linux terminal để truy cập vào thiết bị:
ssh volumio@volumio.local
(Mật khẩu mặc định của Volumio là volumio).
Bước 2: Thực thi script cài đặt tự động
Chạy lệnh cài đặt chính thức từ kho mã nguồn GitHub:
curl -fsSL https://raw.githubusercontent.com/foonerd/glass/main/get-glass.sh | sh
Script sẽ tự động nhận diện kiến trúc CPU của thiết bị (x86_64, armv7 hoặc aarch64/armv8), tải bản nhị phân biên dịch sẵn tối ưu nhất, đăng ký dịch vụ vào hệ thống Volumio và tự động cấu hình lại chuỗi âm thanh ALSA với glasstap.
[!IMPORTANT] Lưu ý quan trọng cho người dùng chuyển đổi từ PeppyMeter Screensaver:
- Nếu bạn đang sử dụng PeppyMeter Screensaver, hãy đảm bảo đã cập nhật plugin đó lên phiên bản cuối cùng là 3.5.0.
- Vào mục Quản lý Plugin của Volumio và Tắt (Disable) PeppyMeter Screensaver trước khi chạy lệnh cài đặt Glass (tuyệt đối chưa gỡ bỏ / uninstall).
- Khi khởi động lần đầu, Glass sẽ tự động sao chép toàn bộ kho theme hiện có từ thư mục
/data/INTERNAL/peppy_screensaversang thư mục mới/data/INTERNAL/glass.- Sau khi Glass đã chạy ổn định và hiển thị đúng kho theme, bạn mới tiến hành gỡ bỏ an toàn PeppyMeter Screensaver để tránh bị xóa mất dữ liệu theme.
Bước 3: Cấu hình và thưởng thức
- Truy cập vào trang quản trị Volumio, tìm đến mục Plugins -> Glass hoặc mở trực tiếp địa chỉ:
http://volumio.local:5582/ - Tại tab Themes, lựa chọn skin yêu thích và căn chỉnh độ nhạy của kim (Gain dB) cho phù hợp với mức âm lượng thường nghe.
- Nếu sử dụng màn hình cảm ứng trực tiếp, vào tab System và chọn kích hoạt hệ sinh thái giao diện glass-evo để trải nghiệm phong cách điều khiển cảm ứng không trình duyệt kiosk.
7. Tổng kết và định hướng cho cộng đồng Audio DIY
Sự xuất hiện của Glass và Glass-evo không chỉ đơn thuần là một bản nâng cấp thay thế cho PeppyMeter Screensaver, mà là một bước chuyển biến lớn về tư duy tối ưu hóa phần mềm cho thiết bị phát âm thanh mạng (Network Music Streamer). Bằng việc ứng dụng ngôn ngữ hiện đại Rust và cơ chế audio tap thụ động bit-perfect, nhà phát triển đã chứng minh rằng chúng ta hoàn toàn có thể sở hữu một giao diện đồng hồ VU kim vẩy đồ họa sắc nét, mượt mà mà không phải đánh đổi dù chỉ 1% chất lượng âm thanh hay độ ổn định của hệ thống.
Đối với cộng đồng Audio DIY và người dùng Android TV Box như Beelink GT-King Pro, sự kết hợp giữa Volumio 4.0, phần cứng DAC ESS SABRE và Glass Engine đã kiến tạo nên một cỗ máy phát nhạc số Hi-End thực thụ, đủ sức sánh ngang với những thiết bị streamer thương mại đắt đỏ trên thị trường.
Nguồn tham khảo chính thức
- Kho mã nguồn Glass trên GitHub: https://github.com/foonerd/glass - Tài liệu kiến trúc, mã nguồn Rust và hướng dẫn phát hành.
- Kho mã nguồn glass-evo trên GitHub: https://github.com/foonerd/glass-evo - Giao diện native cho người chơi Volumio thuộc gia đình evo framework.
- Thông báo phát hành chính thức trên Volumio Community: https://community.volumio.com/t/plugin-glass-phoenix-risen-from-the-peppymeter-screensaver-ashes/77706 - Bài viết của tác giả nerd/foonerd phân tích sự chuyển dịch từ PeppyMeter sang Glass.
- Bài viết phát hành Volumio 4.0 cho Beelink GT-King Pro trên DaivietPDA: https://daivietpda.com/phat-hanh-volumio-4-cho-beelink-gt-king-pro-s922x-h/ - Nền tảng phần cứng TV Box Audiophile thực tế được áp dụng trong bài viết.


