2 poin oleh GN⁺ 2024-11-11 | 1 komentar | Bagikan ke WhatsApp
  • Audio Decomposition adalah program open-source yang mencoba memecah audio menjadi not dan instrumen penyusunnya untuk mentranskripsikan musik menjadi partitur
  • Sampel instrumen diambil dari University of Iowa Electronic Music Studios instrument database, lalu transformasi Fourier dan envelope tiap waveform disimpan sebagai acuan pembanding
  • File musik dianalisis per interval 0,1 detik untuk membuat spektrogram, kemudian transformasi Fourier tersimpan dari tiap instrumen dikombinasikan untuk memperkirakan besaran tiap instrumen pada segmen tersebut
  • Analisis envelope memisahkan bagian attack·sustain·release serta redaman statis/dinamis, lalu menghitung biaya per instrumen pada rentang not yang sudah difilter
  • Hasilnya memilih cara menampilkan seperti partitur dengan scatter plot matplotlib alih-alih meregenerasi audio, sehingga pemecahan masalah dan tampilan data sparse menjadi lebih mudah

Dekomposisi audio untuk konversi partitur

Transformasi Fourier per 0,1 detik

  • Dengan asumsi suara instrumen terutama dapat dicirikan oleh transformasi Fourier dan envelope, kedua informasi ini digunakan untuk memperkirakan instrumen mana yang memainkan not apa
  • File musik diproses dalam bentuk spektrogram dengan melakukan transformasi Fourier setiap 0,1 detik
  • Untuk mereproduksi transformasi Fourier pada tiap segmen 0,1 detik, transformasi Fourier tersimpan dari tiap instrumen dijumlahkan
  • Besaran tiap instrumen dihitung dengan menyelesaikan matriks yang berasal dari turunan parsial per frekuensi pada fungsi biaya MSE
    • Tiap baris matriks sesuai dengan turunan parsial untuk masing-masing instrumen seperti cello, piano, dan sebagainya
    • Contohnya adalah perhitungan biaya untuk nilai per frekuensi, seperti nilai transformasi Fourier pada 5Hz

Envelope dan pemisahan bagian not

  • Envelope adalah batas atas waveform, dan karena fungsi yang ada terkadang tidak bekerja dengan baik pada noise atau waveform tertentu, digunakan pendekatan tersendiri
  • Proses perhitungannya dilakukan dengan membagi waveform menjadi chunk lalu mengambil nilai maksimum dari tiap chunk
  • Setelah itu, hasilnya diperhalus dengan mencari titik ketika envelope lebih rendah daripada waveform asli dan menambahkan titik baru
  • Envelope dibagi menjadi attack, sustain, dan release
    • attack: suara awal dari not
    • sustain: bagian ketika not dipertahankan
    • release: bagian ketika not berhenti
  • Pada sampel instrumen, nilai pertama yang bukan nol digunakan sebagai titik awal attack
  • Batas antara attack dan sustain ditentukan sebagai titik pertama ketika fungsi menjadi cekung ke bawah atau menurun
  • Batas antara sustain dan release ditentukan dengan melihat dari akhir, sebagai titik pertama ketika fungsi meningkat atau cekung ke bawah
  • Akhir release dicari dari akhir sebagai titik pertama yang bukan nol

Jenis redaman dan pencocokan instrumen

  • Untuk membedakan bentuk utama waveform, dipertimbangkan redaman statis dan redaman dinamis
  • Beberapa instrumen seperti piano umumnya memiliki redaman statis yang mengikuti bentuk redaman eksponensial
  • Beberapa instrumen seperti violin dapat meningkat atau menurun volumenya bahkan selama sustain
  • Di antara sampel instrumen, ada file yang dipertahankan sampai suaranya hilang secara alami, dan ada juga file yang di-release lebih awal
  • Apakah redaman bersifat statis atau dinamis dibedakan berdasarkan apakah koefisien redaman lebih besar dari 1 atau terlalu banyak menyimpang dari kurva redaman
  • Apakah envelope memiliki release, yaitu AS atau ASR, ditentukan dengan membandingkan laju perubahan rata-rata sustain dan release
    • Jika laju perubahan release lebih rendah, dianggap tidak memiliki release
  • Dalam pemrosesan file musik, band-pass filter diterapkan untuk tiap frekuensi not
  • Untuk waveform yang sudah difilter, setiap instrumen ditelusuri dan korelasi silang dari attack serta release yang dinormalisasi dihitung untuk menemukan awal dan akhir not
  • Setelah itu, MSE antara waveform instrumen dan audio yang sudah difilter dihitung dan digunakan sebagai biaya instrumen pada titik waktu tersebut
  • Besaran akhir dihitung dengan mengalikan besaran dari tahap transformasi Fourier dengan 1 / biaya dari tahap envelope

Tampilan hasil berbasis scatter plot

  • Hasilnya ditampilkan seperti partitur menggunakan scatter plot matplotlib dengan titik berbentuk -
  • Awalnya, tujuannya adalah meregenerasi audio dari besaran yang dihitung, tetapi ada banyak masalah, memakan waktu, dan sulit di-debug
  • imshow dari matplotlib juga dicoba, tetapi sangat tidak efisien ketika sebagian besar nilainya 0
    • Sebab saat menggeser layar atau memperbesar/memperkecil, semua titik harus digambar ulang terlepas dari apakah terlihat di layar atau tidak
  • Hasilnya dapat digunakan untuk membuat rekonstruksi partitur yang lebih baik, terutama ketika sulit menemukan pitch atau chord yang benar
  • Sebagai contoh, ini digunakan untuk merekonstruksi partitur Noteflight berdasarkan video YouTube
  • Waktu eksekusinya juga berada pada tingkat yang tidak terlalu lama

1 komentar

 
GN⁺ 2024-11-11
Komentar Hacker News
  • Judulnya agak membingungkan. Kalau ditulis open-source separation, itu terbaca seperti pemisahan sumber (source separation), tetapi sebenarnya bukan itu; ini adalah algoritme deteksi pitch, lalu mengklasifikasikan dari instrumen mana pitch yang terdeteksi itu berasal
    Cukup keren, tetapi kalau benar-benar butuh hasil yang akurat, sepertinya waktu untuk memperbaiki keluarannya bisa lebih lama daripada mengerjakannya secara manual

    • Agar adil kepada pembuatnya, ia masih siswa SMA: https://matthew-bird.com/about.html
      Untuk hasil yang dibuat pada usia itu, ini mengagumkan
    • Saya penasaran apakah source separation biasanya lebih sering disebut stem separation, atau apakah itu konsep yang berbeda
      Saat musisi mencoba memulihkan sesuatu yang mendekati track asli sebelum mixing dari satu file audio, yaitu stem, rasanya istilah yang terakhir lebih sering terdengar
    • Menurut saya adanya tanda hubung membuat ambiguitas semacam itu hilang sepenuhnya
  • Saya tidak melihatnya disebut langsung di tulisan, tetapi bagi yang tertarik, transkripsi musik otomatis, yaitu bidang mengubah audio menjadi MIDI, adalah subbidang yang cukup besar dalam deep learning dan music information retrieval
    Ada beberapa model yang berhasil untuk transkripsi musik multitrack, dan ada proyek MT3 dari Google: https://research.google/pubs/mt3-multi-task-multitrack-music...
    Untuk transkripsi piano, akurasinya kini sudah hampir sempurna bahkan pada audio berkualitas sangat rendah: https://github.com/EleutherAI/aria-amt
    Sebagai catatan, saya adalah pembuat repositori di atas

    • Di sini mereka juga mencoba menyelesaikan masalah lain yang juga cukup sulit. Masalah menurunkan partitur yang akurat dari data MIDI termasuk jenis yang “terlihat mudah, tetapi sebenarnya tidak”
      Transcriber audio-ke-MIDI cukup baik menebak pitch dan waktu mulai, tetapi durasi dan intensitasnya jauh kurang stabil
    • Saya tahu skor yang dilaporkan MT3 sangat bagus, tetapi penasaran apakah saat dicoba langsung juga berhasil: https://replicate.com/turian/multi-task-music-transcription
      Saya mem-port Colab mereka menjadi runtime agar lebih mudah dipakai, tetapi output MIDI-nya cukup aneh
      Bahkan ketika diberi stem sederhana, beberapa track tidak selaras dengan baik antara output MIDI dan audio, dan masalah timing-nya membuatnya tidak bisa dipakai; pada audio lain kadang bekerja cukup baik
    • Saya penasaran bagaimana masalah ini menjadi lebih sederhana jika dibatasi pada piano
  • Kalau tertarik pada pemisahan audio atau stem separation, RipX layak dilihat: https://hitnmix.com/ripx-daw-pro/
    Track yang sudah dipisahkan juga bisa diekspor sebagai file MIDI. Masih ada beberapa masalah, tetapi bekerja cukup baik
    Stem separation sekarang mulai menjadi fitur standar di software musik dan hampir semua DAW menyediakannya

    • RipX melakukan stem separation dan memungkinkan penyetelan ulang tinggi nada di dalam mix, jadi bagus kalau itu tujuannya
      Untuk pekerjaan yang saya lakukan, moises lebih mudah dipakai: https://moises.ai/
      Mendukung transposisi atau time-stretching seluruh lagu, dan punya antarmuka sederhana untuk stem separation serta mute/atur volume per track. Beat dan chord dideteksi otomatis
      Saya bukan pihak terkait, hanya pengguna puas yang memakainya hampir setiap hari untuk mempelajari dan berlatih lagu. Biasanya saya menaikkan bagian bass asli dan menurunkan sisanya ke volume di bawah 10% agar bass terdengar jelas, dan itu benar-benar memperlihatkan betapa seringnya partitur online, termasuk yang berbayar, salah. Setelah menguasai part-nya, saya mem-mute bass dan bermain mengikuti lagu asli seperti seorang bassist
    • Stemroller[0] juga sudah ada cukup lama, gratis, dan berbasis model Meta
      0: https://www.stemroller.com/
    • Daripada “hampir semua DAW menyediakannya”, ini lebih merupakan fitur yang sedang naik daun yang seharusnya dimiliki hampir semua DAW, tetapi kebanyakan belum memilikinya
      Ableton Live - tidak ada
      Bitwig - tidak ada
      Cubase - tidak ada
      FL - ada
      Logic - ada
      Pro Tools - tidak ada
      Reason - tidak ada
      Reaper - tidak ada
      Studio One - ada
    • Tampaknya terkait dengan Polymath: https://github.com/samim23/polymath
      Polymath efektif untuk memisahkan dan mengekstrak track instrumen individual dari MP3, dan bekerja sangat baik
  • Sangat keren, tetapi ada fisika instrumen nyata yang tidak akan tertangkap oleh template transformasi Fourier sederhana. Misalnya, pada trompet, spektrum overtone bisa sangat berbeda antara saat meniup lemah dan kuat meskipun pitch-nya sama
    Trompet menghasilkan deret overtone yang kaya dengan overtone kuat, sehingga pada transformasi Fourier muncul puncak-puncak menonjol pada kelipatan bulat dari frekuensi dasar. Instrumen seperti flute menghasilkan nada yang lebih murni, tetapi instrumen brass biasanya memiliki overtone tinggi yang lebih kuat, sehingga turunan parsial pada persamaan matriks yang disebutkan di tulisan akan menjadi lebih kompleks
    Skrip ini mengidentifikasi timing nada melalui band-pass filtering dan korelasi silang envelope attack/release. Karena instrumen brass dapat menunjukkan perilaku nonlinier dengan komposisi overtone yang sangat berubah tergantung intensitas permainan, saya tidak yakin bagaimana algoritme ini menangani kasus ketika brightness berbeda antara pp dan ff. Untuk meningkatkan akurasi, saya akan mempertimbangkan menambahkan template Fourier bergantung intensitas per instrumen

    • Sebagai orang yang memakai source separation dua kali seminggu untuk keperluan mixing, ada sangat banyak instrumen yang bisa menghasilkan timbre seperti “vokal”
      Model-model seperti ini semuanya tidak bekerja baik pada band ketika instrumennya tidak menghasilkan bunyi tipikal, atau ketika permainan dan mixing-nya tidak dibuat untuk memaksimalkan pemisahan antar-instrumen. Misalnya gitar listrik dengan overtone terdistorsi memainkan nada yang sama dengan vokal, drummer hanya menghasilkan noise tajam dari simbal, dan bassist meniru bunyi pukulan seperti kick drum dengan instrumennya
      Dalam musik eksperimental seperti ini, hasil source separation menjadi sepenuhnya tidak dapat diprediksi, dan mungkin bisa atau tidak bisa dipakai untuk rebalancing musikal
  • Sepertinya ini karya yang dibuat oleh adiknya Joshua Bird. Joshua Bird juga dulu membuat proyek-proyek mengesankan yang pernah muncul di HN: https://www.youtube.com/@joshuabird333

    • Benar, Matt adalah adiknya Josh. Mengejutkan sekaligus sangat menyenangkan bahwa kamu menyadarinya
  • Saya jadi teringat saat bermain Audiosurf sekitar 15 tahun lalu. Waktu cepat sekali berlalu
    https://en.wikipedia.org/wiki/Audiosurf

  • Entah saya yang salah lihat, tetapi sepertinya tidak ada satu pun demo YouTube yang menunjukkan source separation
    Sebagai tambahan, dalam riset audio, source separation berarti memisahkan audio menjadi klip-klip terpisah

    • Di sini sepertinya dekomposisi adalah istilah yang lebih tepat. Dalam kasus ini, source separation tampaknya dipakai untuk berarti bahwa nada-nada yang sudah didekomposisi bisa dibagi ke sumber-sumber berbeda, tetapi ungkapan itu menyesatkan
    • “Source” di sini tampaknya merujuk pada source dalam “open source”
  • Saya penggemar lama Ultrastar Deluxe. Itu adalah klona open-source dari Singstar, sebuah gim karaoke tempat orang bernyanyi mengikuti lagu dan berkompetisi
    Gim ini mengenali nada yang dinyanyikan, membandingkannya dengan berkas pemetaan timing vokal lagu tersebut, lalu memberi skor lebih tinggi semakin baik nyanyiannya mengikuti melodi. Ketepatan lirik tidak penting
    Ada banyak pustaka pemetaan lagu buatan penggemar, tetapi selalu terasa kurang, dan lagu yang dipetakan dalam bahasa selain Inggris dan Spanyol sangat sedikit. Memetakan semuanya secara manual memakan banyak waktu, dan karena saya sendiri hampir buta nada, itu makin sulit
    Sejak lama saya penasaran perangkat lunak seperti apa yang bisa mengotomatisasi proses ini dengan lebih mudah, dan alat ini tampak sangat bagus untuk menangkap timing serta nada vokal dari lagu asli
    Salah satu hal dalam bucket list saya adalah suatu hari membuat playlist Singstar dalam bahasa ibu saya dan mengadakan pesta karaoke bersama teman-teman. Saya penasaran kalau ada rekomendasi alat serupa

    • Bagus. Saya tidak tahu ada yang seperti ini
      Di berkas teksnya tampaknya dibutuhkan vokal dan pitch beserta timestamp, dan AI sudah makin mendekati tingkat yang bisa mengotomatisasi pembuatannya
      Saya meninggalkan tautan yang baru saja saya temukan untuk dibaca lebih lanjut: https://www.reddit.com/r/karaoke/comments/x61kzy/modern_equi...
  • Menurut saya beberapa video sepertinya tidak memiliki audio

    • Alasannya tertulis di tautan YouTube. Disebutkan “tidak ada audio karena hak cipta”, dan ada juga tautan audio yang bisa diputar bersamaan