Audio Decomposition - mã nguồn mở tách nhạc thành nốt và nhạc cụ
(matthew-bird.com)- Audio Decomposition là một chương trình mã nguồn mở nhằm chia audio thành các nốt cấu thành và nhạc cụ để chuyển nhạc sang bản nhạc
- Mẫu nhạc cụ được lấy từ University of Iowa Electronic Music Studios instrument database, đồng thời lưu biến đổi Fourier và envelope của từng dạng sóng để dùng làm tiêu chuẩn so sánh
- Tệp nhạc được phân tích theo đơn vị 0,1 giây để tạo spectrogram, rồi kết hợp các biến đổi Fourier đã lưu theo từng nhạc cụ để ước lượng biên độ của từng nhạc cụ trong đoạn đó
- Phân tích envelope chia các đoạn attack·sustain·release và suy hao tĩnh/động, sau đó tính chi phí theo từng nhạc cụ trong dải nốt đã được lọc
- Kết quả không chọn cách tái tạo audio mà hiển thị như bản nhạc bằng biểu đồ phân tán matplotlib, giúp giải quyết vấn đề và biểu diễn dữ liệu thưa dễ hơn
Phân rã audio để chuyển thành bản nhạc
- Audio Decomposition bắt đầu từ mục tiêu tạo ra một chương trình chuyển nhạc thành bản nhạc
- Tác giả muốn tự mình chép nhạc sang bản nhạc, và động lực là cảm thấy còn thiếu các thuật toán tách nguồn audio đơn giản, lại là mã nguồn mở
- Video demo được công bố trên YouTube
- Kho lưu trữ GitHub là mbird1258/Audio-Decomposition
- Mẫu nhạc cụ được lấy từ University of Iowa Electronic Music Studios instrument database
- Với mỗi tệp, hệ thống tính và lưu biến đổi Fourier cùng envelope của toàn bộ dạng sóng
Biến đổi Fourier theo đơn vị 0,1 giây
- Tác giả cho rằng âm thanh của nhạc cụ chủ yếu có thể được đặc trưng bằng biến đổi Fourier và envelope, rồi dùng hai thông tin này để suy ra nhạc cụ nào đang phát ra nốt nào
- Tệp nhạc được xử lý dưới dạng spectrogram bằng cách thực hiện biến đổi Fourier mỗi 0,1 giây
- Để tái hiện biến đổi Fourier của từng đoạn 0,1 giây, hệ thống cộng các biến đổi Fourier đã lưu theo từng nhạc cụ
- Biên độ theo từng nhạc cụ được tính bằng cách giải ma trận sinh ra từ đạo hàm riêng theo tần số của hàm chi phí MSE
- Mỗi hàng trong ma trận tương ứng với đạo hàm riêng của từng nhạc cụ như cello, piano...
- Ví dụ là phép tính chi phí cho các giá trị theo từng tần số như giá trị biến đổi Fourier tại 5Hz
Envelope và tách đoạn của âm
- Envelope là đường bao trên của dạng sóng; do các hàm có sẵn đôi khi hoạt động không tốt với nhiễu hoặc một số dạng sóng cụ thể, tác giả dùng một cách riêng
- Quá trình tính toán là chia dạng sóng thành các chunk rồi lấy giá trị lớn nhất của mỗi chunk
- Sau đó tinh chỉnh kết quả bằng cách tìm những điểm mà envelope thấp hơn dạng sóng gốc và thêm các điểm mới
- Envelope được chia thành attack, sustain, release
- attack: âm thanh khởi đầu của nốt
- sustain: đoạn nốt được duy trì
- release: đoạn âm dừng lại
- Trong mẫu nhạc cụ, giá trị khác 0 đầu tiên được dùng làm điểm bắt đầu của attack
- Ranh giới giữa attack và sustain được xác định là điểm đầu tiên mà hàm lõm xuống hoặc giảm
- Ranh giới giữa sustain và release được xác định khi duyệt từ cuối lên, tại điểm đầu tiên mà hàm tăng hoặc lõm xuống
- Điểm kết thúc của release được tìm bằng cách duyệt từ cuối lên đến điểm đầu tiên khác 0
Kiểu suy hao và khớp nhạc cụ
- Để phân biệt các hình dạng chính của dạng sóng, tác giả xét suy hao tĩnh và suy hao động
- Một số nhạc cụ như piano có suy hao tĩnh, thường tuân theo dạng suy hao mũ
- Một số nhạc cụ như violin có thể tăng hoặc giảm âm lượng ngay cả trong lúc sustain
- Trong các mẫu nhạc cụ, có tệp duy trì đến khi âm tự nhiên biến mất, cũng có tệp được release sớm
- Việc suy hao là tĩnh hay động được phân biệt dựa trên việc hệ số suy hao lớn hơn 1 hay độ lệch khỏi đường cong suy hao quá nhiều
- Việc envelope có release hay không, tức là AS hay ASR, được xác định bằng cách so sánh tốc độ thay đổi trung bình của sustain và release
- Nếu tốc độ thay đổi của release thấp hơn thì xem như không có release
- Khi xử lý tệp nhạc, hệ thống áp dụng bộ lọc thông dải cho từng tần số nốt
- Với dạng sóng đã lọc, hệ thống lặp qua từng nhạc cụ và tính tương quan chéo của attack và release đã chuẩn hóa để tìm điểm bắt đầu và kết thúc của âm
- Sau đó tính MSE giữa dạng sóng nhạc cụ và audio đã lọc để dùng làm chi phí nhạc cụ tại thời điểm đó
- Biên độ cuối cùng được tính bằng cách nhân biên độ ở bước biến đổi Fourier với
1 / 비용ở bước envelope
Hiển thị kết quả bằng biểu đồ phân tán
- Kết quả được biểu diễn như bản nhạc bằng scatter plot của matplotlib với các điểm hình
- - Ban đầu tác giả định tái tạo audio từ các biên độ đã tính, nhưng cách này gặp nhiều vấn đề, tốn thời gian và khó gỡ lỗi
- Tác giả cũng thử imshow của matplotlib, nhưng trong tình huống phần lớn giá trị là 0 thì cách này rất kém hiệu quả
- Vì mỗi lần di chuyển màn hình hoặc phóng to, thu nhỏ đều phải vẽ lại tất cả các điểm, bất kể chúng có nằm trong vùng hiển thị hay không
- Kết quả cuối cùng có thể được dùng để tái tạo bản nhạc tốt hơn, đặc biệt hữu ích khi khó tìm đúng cao độ hoặc hợp âm
- Ví dụ, công cụ đã được dùng để tái tạo bản nhạc Noteflight dựa trên video YouTube
- Thời gian chạy cũng không quá dài
1 bình luận
Ý kiến trên Hacker News
Tiêu đề hơi gây nhầm lẫn. Viết open-source separation thì dễ đọc thành tách nguồn (source separation), nhưng thực ra không phải vậy, mà là thuật toán phát hiện cao độ, rồi phân loại cao độ phát hiện được đó xuất phát từ nhạc cụ nào
Khá ấn tượng, nhưng nếu thật sự cần kết quả chính xác, có vẻ thời gian chỉnh sửa đầu ra có thể còn lâu hơn làm thủ công
Với sản phẩm làm được ở độ tuổi đó thì thật đáng kinh ngạc
Khi các nhạc sĩ cố khôi phục từ một file âm thanh đơn lẻ những thứ gần với các track gốc trước khi mix, tức là các stem, mình có vẻ nghe cách gọi sau nhiều hơn
Mình không thấy bài viết nhắc trực tiếp, nhưng với ai quan tâm thì tự động chép nhạc, tức lĩnh vực chuyển âm thanh sang MIDI, là một nhánh con khá lớn trong deep learning và truy xuất thông tin âm nhạc
Cũng đã có nhiều mô hình thành công trong chép nhạc đa track, và có dự án MT3 của Google: https://research.google/pubs/mt3-multi-task-multitrack-music...
Với chép nhạc piano, hiện độ chính xác đã gần như hoàn hảo ngay cả với âm thanh chất lượng rất thấp: https://github.com/EleutherAI/aria-amt
Nhân tiện, mình là tác giả của repo trên
Bộ chép âm thanh sang MIDI đoán khá tốt cao độ và thời điểm bắt đầu, nhưng độ dài và cường độ thì kém ổn định hơn nhiều
Mình đã port Colab của họ sang runtime để dễ dùng hơn, nhưng đầu ra MIDI khá kỳ lạ
Ngay cả khi đưa vào stem đơn giản, một số track có đầu ra MIDI không khớp tốt với âm thanh và gặp vấn đề timing đến mức không dùng được, còn với âm thanh khác thì lại hoạt động ổn
Nếu quan tâm đến tách âm thanh hay tách stem, RipX đáng để xem qua: https://hitnmix.com/ripx-daw-pro/
Cũng có thể xuất các track đã tách thành file MIDI. Vẫn còn vài vấn đề nhưng hoạt động khá tốt
Tách stem giờ đang trở thành tính năng tiêu chuẩn trong phần mềm âm nhạc và hầu như DAW nào cũng cung cấp
Với công việc của mình, moises dễ dùng hơn: https://moises.ai/
Nó hỗ trợ chuyển giọng hoặc kéo giãn thời gian cho toàn bộ bài, có giao diện đơn giản để tách stem và tắt tiếng/điều chỉnh âm lượng theo từng track. Tự động phát hiện nhịp và hợp âm
Mình không liên quan gì, chỉ là người dùng hài lòng, dùng gần như hằng ngày để học và luyện bài. Thường mình tăng phần bass gốc và hạ các phần còn lại xuống dưới 10% âm lượng để nghe bass rõ hơn, nhờ đó thấy rất rõ các bản nhạc chép trên mạng, kể cả bản trả phí, sai thường xuyên đến mức nào. Sau khi học xong phần đó, mình tắt tiếng bass và chơi theo bản gốc như một bassist
0: https://www.stemroller.com/
Ableton Live - không có
Bitwig - không có
Cubase - không có
FL - có
Logic - có
Pro Tools - không có
Reason - không có
Reaper - không có
Studio One - có
Polymath hiệu quả trong việc tách và trích xuất từng track nhạc cụ từ MP3, và hoạt động rất tốt
Thật sự rất hay, nhưng có những yếu tố vật lý của nhạc cụ thật mà mẫu biến đổi Fourier đơn giản sẽ không bắt được. Ví dụ, với cùng một cao độ, trumpet có thể có phổ họa âm rất khác nhau khi thổi nhẹ và khi thổi mạnh
Trumpet tạo ra chuỗi họa âm phong phú với các họa âm mạnh, nên trong biến đổi Fourier sẽ xuất hiện các đỉnh nổi bật ở những bội số nguyên của tần số cơ bản. Các nhạc cụ như flute tạo âm sắc thuần hơn, nhưng kèn đồng thường có các họa âm cao mạnh hơn, nên các đạo hàm riêng trong phương trình ma trận nêu trong bài cũng sẽ phức tạp hơn
Script này xác định timing của nốt bằng lọc thông dải và tương quan chéo của envelope attack/release. Vì nhạc cụ kèn đồng có thể thể hiện hành vi phi tuyến, trong đó thành phần họa âm thay đổi mạnh theo cường độ chơi, mình không rõ thuật toán này sẽ xử lý thế nào khi độ sáng âm khác nhau giữa pp và ff. Để tăng độ chính xác, mình sẽ cân nhắc thêm mẫu Fourier phụ thuộc cường độ theo từng nhạc cụ
Các mô hình như thế này đều hoạt động không tốt khi nhạc cụ không phát ra âm thanh điển hình, hoặc trong các ban nhạc không được chơi/mix sao cho tối đa hóa sự tách biệt giữa các nhạc cụ. Ví dụ có trường hợp guitar điện với họa âm bị distortion chơi cùng nốt với vocal, tay trống chỉ tạo tiếng ồn sắc ở cymbal, còn bassist dùng nhạc cụ bắt chước tiếng gõ như kick drum
Với loại nhạc thử nghiệm như vậy, kết quả tách nguồn trở nên hoàn toàn không thể dự đoán, và có thể dùng được hoặc không dùng được cho việc cân bằng lại âm nhạc
Trông giống như một tác phẩm do em trai của Joshua Bird làm. Joshua Bird trước đây cũng từng có những dự án ấn tượng được đăng lên HN: https://www.youtube.com/@joshuabird333
Làm tôi nhớ lại hồi chơi Audiosurf khoảng 15 năm trước. Thời gian trôi nhanh thật
https://en.wikipedia.org/wiki/Audiosurf
Không biết có phải tôi nhìn nhầm không, nhưng dường như không có demo YouTube nào cho thấy tách nguồn cả
Nói thêm, trong nghiên cứu âm thanh, tách nguồn nghĩa là tách âm thanh thành các clip riêng biệt
Tôi là fan lâu năm của Ultrastar Deluxe. Đây là một bản clone mã nguồn mở của Singstar, một game karaoke nơi mọi người hát theo bài hát và cạnh tranh với nhau
Nó nhận diện nốt bạn hát rồi so sánh với file ánh xạ thời điểm vocal của bài đó; bạn hát càng khớp với giai điệu thì điểm càng cao. Việc hát đúng lời hay không không quan trọng
Dù có nhiều thư viện ánh xạ bài hát do fan tạo, nhưng lúc nào cũng vẫn thiếu, và số bài được ánh xạ bằng các ngôn ngữ ngoài tiếng Anh và tiếng Tây Ban Nha thì rất ít. Việc ánh xạ tất cả thủ công rất tốn thời gian, và bản thân tôi gần như mù nhạc nên càng khó hơn
Từ lâu tôi đã tò mò không biết phần mềm nào có thể tự động hóa để quá trình này dễ hơn, và công cụ này trông rất phù hợp để trích xuất thời điểm vocal và nốt từ bản gốc
Một ngày nào đó, việc tạo một playlist Singstar bằng tiếng mẹ đẻ của tôi và mở tiệc hát với bạn bè là điều nằm trong bucket list của tôi. Nếu có gợi ý về công cụ tương tự thì tôi rất muốn biết
Có vẻ file văn bản cần vocal và cao độ kèm timestamp, và AI đang tiến gần đến mức có thể tự động hóa việc tạo ra chúng
Tôi để lại liên kết vừa tìm được để đọc thêm: https://www.reddit.com/r/karaoke/comments/x61kzy/modern_equi...
Theo tôi thấy thì một số video có vẻ không có âm thanh