AugmentedChords lên #1 Hacker News – Ứng dụng bản nhạc xây dựng trên MentraOS

Cayden Pierce
Cayden Pierce
CEO
AugmentedChords lên #1 Hacker News – Ứng dụng bản nhạc xây dựng trên MentraOS

Kevin Lin đã tham gia hackathon MentraOS đầu tiên của chúng tôi và xây dựng một ứng dụng kính thông minh hiển thị bản nhạc ngay trong tầm nhìn khi anh chơi piano. Sau đó anh đăng video về dự án này và leo lên #1 Hacker News vào ngày 3 tháng 5. Kevin là một huyền thoại trong cộng đồng MentraOS và đã đạt giải ở mọi hackathon của Mentra.

Đây là bài đăng trên Hacker News: https://news.ycombinator.com/item?id=43906442

Dưới đây là nguyên văn chia sẻ của Kevin:

Xin chào mọi người, tôi là Kevin Lin, và đây là bài Show HN cho dự án kính thông minh hiển thị bản nhạc của tôi. Video của tôi đã lên trang chủ vào thứ Sáu: https://news.ycombinator.com/item?id=43876243, nhưng dang gợi ý chúng tôi nên đăng thêm một bài Show HN, nên đây rồi!

Tôi đã muốn đưa bản nhạc lên kính thông minh từ lâu, nhưng cơ hội hoàn hảo để thực hiện đến vào giữa tháng Hai, khi Mentra (YC W25) đăng tweet về một hackathon kính thông minh mà họ tổ chức – người thắng cuộc sẽ được mang kính về nhà. Tôi đã tham gia, có những giây phút tuyệt vời khi làm hàng loạt ứng dụng liên quan đến âm nhạc cùng đồng đội, và chúng tôi đã thắng, nên tôi được mang kính về, hoàn thiện dự án, và làm một video khá thú vị về nó (https://www.youtube.com/watch?v=j36u2i7PKKE).

Chiếc kính là Even Realities G1. Nhìn bề ngoài chúng khá bình thường, nhưng có hai microphone, một màn hình ở mỗi mắt kính, và thậm chí có thể làm theo độ cận. Ai từng thử đeo cũng ngạc nhiên vì màn hình hiển thị tốt đến vậy, và các video quay lại tiếc là chưa lột tả hết được.

Phần mềm chạy trên AugmentOS – hệ điều hành kính thông minh của Mentra, hoạt động trên nhiều loại kính thông minh của bên thứ ba, bao gồm cả G1. Tất cả những gì tôi cần làm để tạo ứng dụng là viết và chạy một file typescript dùng AugmentOS SDK. Nó cung cấp cho bạn bản ghi giọng nói và âm thanh thô làm đầu vào, cùng văn bản hoặc bitmap làm đầu ra hiển thị trên màn hình, mọi thứ khác đều được trừu tượng hóa hoàn toàn. Kính của bạn giao tiếp với một ứng dụng AugmentOS, rồi ứng dụng đó giao tiếp với dịch vụ typescript của bạn.

Phần khó duy nhất là viết một script Python để chuyển bản nhạc (định dạng MusicXML) thành các bitmap nhỏ, tối ưu để hiển thị trên màn hình. Ban đầu, hệ sinh thái các thư viện Python liên quan đến âm nhạc hiện có khá thiếu tài liệu và tôi gặp phải nhiều lỗi chưa từng thấy trước đây. Việc thu nhỏ xuống kích thước màn hình bé của kính cũng khiến các thân nốt và dòng kẻ nhạc biến mất, nên tôi nghĩ đến việc dùng phép giãn hình thái học (morphological dilation) để làm nổi bật chúng mà không làm mất khả năng đọc của nốt nhạc. Pipeline cuối cùng là MusicXML → thư viện music21 để render từng đoạn nhịp thành png → giãn ảnh bằng opencv → thu nhỏ → chuyển sang bitmap bằng Pillow → tối ưu bitmap bằng imagemagick. Đây không phải là đoạn code tốt nhất tôi từng viết, nhưng nỗ lực của LLM cho toàn bộ tác vụ này lại khá tệ, và nhiều năm kinh nghiệm Python của tôi thực sự phát huy tác dụng ở đây. Code có trên GitHub: https://github.com/kevinlinxc/AugmentedChords.

Ghép mọi thứ lại, dịch vụ typescript của tôi sẽ phục vụ các bitmap này cục bộ khi được yêu cầu. Tôi đã làm một giao diện để điều hướng menu và bản nhạc bằng lệnh giọng nói (ví dụ: xem danh mục, tiếp theo, chọn, bắt đầu, thoát, tạm dừng) rồi kết nối bàn đạp chân vào laptop. Vì độ trễ gửi bitmap (~3 giây hiện tại, nhưng các thế hệ kính sau sẽ tốt hơn), dùng bàn đạp chân để lật trang khi đang chơi không khả thi, nên thay vào đó tôi để một bàn đạp bật/tắt tự động cuộn, và hai bàn đạp còn lại tăng tốc/tạm dừng việc cuộn.

Sau nhiều lần điều chỉnh, tôi đã có thể chơi trọn một bài hát chỉ bằng kính! Phải thử rất nhiều lần và chắc chắn vẫn còn nhiều điều cần cải thiện. Ví dụ: việc gửi bitmap khá chậm, đó là lý do dùng bàn đạp chân để lật trang chưa khả thi; độ phân giải khá nhỏ, tôi muốn hiển thị được nhiều nhịp hơn cùng lúc để lật ít hơn; vì bàn đạp chân không tiện mang theo, sẽ tuyệt nếu có chế độ để âm thanh tự quyết định khi nào bản nhạc chuyển trang – tôi đã thử implement điều đó bằng FFT nhưng thường sai và cần nhiều nỗ lực hơn nữa. Điều khiển bằng nghiêng đầu cũng sẽ hay, vì khả năng điều khiển thủ công hoàn toàn là yêu cầu bắt buộc khi luyện tập.

Tất cả những điểm hạn chế này đang được Mentra và các công ty khác trong lĩnh vực này giải quyết, nên tôi rất mong chờ thế hệ tiếp theo! Ngoài ra, đừng ngại hỏi tôi bất cứ điều gì!

Làm tốt lắm khi xây dựng những ứng dụng thú vị trên MentraOS, Kevin!

Sẵn sàng phát triển cùng Mentra?

Mã nguồn mở thay đổi rất nhanh. Hãy cập nhật những thông tin mới nhất từ nền tảng.

Không spam. Có thể hủy đăng ký bất cứ lúc nào.