Audio Decomposition - Open-source yang memisahkan musik menjadi not dan instrumen
(matthew-bird.com)- 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
- Audio Decomposition berawal dari tujuan membuat program yang mengubah musik menjadi partitur
- Motivasinya adalah keinginan pribadi untuk mentranskripsikan musik menjadi partitur, serta merasa kurangnya algoritme pemisahan sumber audio yang open-source dan sederhana
- Video demo tersedia di YouTube
- Repositori GitHub-nya adalah mbird1258/Audio-Decomposition
- Sampel instrumen diambil dari University of Iowa Electronic Music Studios instrument database
- Untuk tiap file, transformasi Fourier dan envelope dari keseluruhan waveform dihitung dan disimpan
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 / biayadari 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
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
Untuk hasil yang dibuat pada usia itu, ini mengagumkan
Saat musisi mencoba memulihkan sesuatu yang mendekati track asli sebelum mixing dari satu file audio, yaitu stem, rasanya istilah yang terakhir lebih sering terdengar
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
Transcriber audio-ke-MIDI cukup baik menebak pitch dan waktu mulai, tetapi durasi dan intensitasnya jauh kurang stabil
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
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
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
0: https://www.stemroller.com/
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
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
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
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
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
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