2 điểm bởi GN⁺ 2024-11-11 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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 Fourierenvelope 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

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ĩnhsuy 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

 
GN⁺ 2024-11-11
Ý 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

    • Công bằng với tác giả thì cậu ấy vẫn còn là học sinh trung học: https://matthew-bird.com/about.html
      Với sản phẩm làm được ở độ tuổi đó thì thật đáng kinh ngạc
    • Mình thắc mắc source separation thường được gọi là stem separation nhiều hơn, hay đó là một khái niệm khá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
    • Vì có dấu gạch nối nên mình nghĩ kiểu mơ hồ đó hoàn toàn biến mất
  • 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

    • Ở đây họ còn đang cố giải một bài toán khác, cũng khá khó. Bài toán suy ra bản nhạc chính xác từ dữ liệu MIDI thuộc kiểu “trông dễ nhưng thực ra không phải vậy”
      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 biết điểm số được báo cáo của MT3 rất tốt, nhưng không rõ khi dùng thực tế thì có thành công không: https://replicate.com/turian/multi-task-music-transcription
      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
    • Mình thắc mắc nếu giới hạn ở piano thì bài toán này được đơn giản hóa như thế nào
  • 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

    • RipX tách stem và cho phép chỉnh lại cao độ trong bản mix, nên nếu đó là mục đích thì rất tuyệt
      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
    • Stemroller[0] cũng đã có một thời gian, miễn phí và dựa trên mô hình của Meta
      0: https://www.stemroller.com/
    • Thay vì nói “hầu như DAW nào cũng cung cấp”, đúng hơn là đây là tính năng đang nổi lên mà gần như DAW nào cũng nên có, nhưng hiện đa số vẫn chưa có
      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ó
    • Có vẻ liên quan đến Polymath: https://github.com/samim23/polymath
      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ụ

    • Với tư cách người dùng tách nguồn hai lần mỗi tuần cho mục đích mixing, có rất nhiều nhạc cụ có thể tạo âm sắc kiểu “vocal”
      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

    • Đúng vậy, Matt là em trai của Josh. Thật bất ngờ và rất vui khi bạn nhận ra điều đó
  • 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

    • Ở đây có lẽ phân rã là từ phù hợp hơn. Có vẻ “source separation” trong trường hợp này được dùng với nghĩa là có thể chia các nốt đã được phân rã thành các nguồn khác nhau, nhưng cách nói này dễ gây hiểu nhầm
    • “source” ở đây có vẻ là từ đi kèm với “source” trong “open source”
  • 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

    • Hay đấy. Tôi không biết là có thứ như vậy
      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

    • Lý do được ghi trong liên kết YouTube. Có ghi “không có âm thanh vì bản quyền”, và cũng có liên kết âm thanh để phát cùng