Audio Decomposition - Müziği notalara ve enstrümanlara ayıran açık kaynak
(matthew-bird.com)- Audio Decomposition, müziği notaya dökmek için sesi onu oluşturan notalara ve enstrümanlara ayırmayı amaçlayan açık kaynaklı bir programdır
- Enstrüman örnekleri University of Iowa Electronic Music Studios instrument database'den alınır; her dalga biçiminin Fourier dönüşümü ve zarfı saklanarak karşılaştırma ölçütü olarak kullanılır
- Müzik dosyası 0,1 saniyelik aralıklarla analiz edilerek bir spektrogram oluşturulur ve kaydedilmiş enstrüman bazlı Fourier dönüşümleri birleştirilerek ilgili bölümdeki enstrüman büyüklükleri tahmin edilir
- Zarf analizi, attack·sustain·release bölümlerini ve statik/dinamik sönümü ayırdıktan sonra filtrelenmiş nota bantlarında enstrüman başına maliyet hesaplar
- Sonuç, sesi yeniden üretmek yerine matplotlib scatter plot ile nota gibi gösterilir; bu da sorun çözmeyi ve seyrek veriyi göstermeyi kolaylaştırır
Nota dönüşümü için ses ayrıştırma
- Audio Decomposition, müziği notaya dönüştüren bir program yapma hedefiyle başladı
- Kişisel olarak müziği notaya aktarmak istiyordu ve açık kaynaklı, basit ses kaynak ayırma algoritmalarının yetersiz olduğunu düşünmesi motivasyon oldu
- Demo videoları YouTube'da yayınlanmış durumda
- GitHub deposu mbird1258/Audio-Decomposition'dur
- Enstrüman örnekleri University of Iowa Electronic Music Studios instrument database'den alınır
- Her dosya için tüm dalga biçiminin Fourier dönüşümü ve zarfı hesaplanıp kaydedilir
0,1 saniye biriminde Fourier dönüşümü
- Enstrüman seslerinin büyük ölçüde Fourier dönüşümü ve zarf ile karakterize edilebildiği varsayılır; bu iki bilgi kullanılarak hangi enstrümanın hangi notayı çaldığı tahmin edilir
- Müzik dosyası her 0,1 saniyede bir Fourier dönüşümüne tabi tutulur ve spektrogram biçiminde işlenir
- Her 0,1 saniyelik bölümün Fourier dönüşümünü yeniden üretmek için kaydedilmiş enstrüman bazlı Fourier dönüşümleri toplanır
- Enstrüman büyüklükleri, MSE maliyet fonksiyonunun frekans bazlı kısmi türevlerinden elde edilen matris çözülerek hesaplanır
- Matrisin her satırı cello, piano gibi her enstrüman için bir kısmi türeve karşılık gelir
- Örnek, 5Hz'deki Fourier dönüşüm değeri gibi frekans bazlı değerler için yapılan maliyet hesabıdır
Zarf ve ses bölgesi ayrımı
- Zarf, dalga biçiminin üst sınırıdır; mevcut fonksiyonlar gürültüde veya belirli dalga biçimlerinde iyi çalışmadığı için ayrı bir yöntem kullanılır
- Hesaplama sürecinde dalga biçimi parçalara ayrılır ve her parça için maksimum değer alınır
- Ardından zarfın özgün dalga biçiminden daha aşağıda kaldığı noktalar bulunup yeni noktalar eklenerek sonuç iyileştirilir
- Zarf attack, sustain, release olarak ayrılır
- attack: sesin ilk başlangıç kısmı
- sustain: sesin korunduğu bölüm
- release: sesin sona erdiği bölüm
- Enstrüman örneklerinde ilk sıfır olmayan değer, attack başlangıç noktası olarak kullanılır
- attack ile sustain arasındaki sınır, fonksiyonun ilk kez aşağı konkav olduğu ya da azalmaya başladığı nokta olarak belirlenir
- sustain ile release arasındaki sınır, sondan başlanarak fonksiyonun arttığı ya da aşağı konkav olduğu ilk nokta olarak belirlenir
- release'in sonu, sondan başlanarak ilk sıfır olmayan nokta bulunarak tespit edilir
Sönüm türleri ve enstrüman eşleştirme
- Dalga biçiminin temel yapısını ayırt etmek için statik sönüm ve dinamik sönüm dikkate alınır
- Piano gibi bazı enstrümanlar genellikle üstel sönüm biçimini izleyen statik sönüme sahiptir
- Violin gibi bazı enstrümanlarda sustain sırasında da ses şiddeti artabilir veya azalabilir
- Enstrüman örnekleri arasında ses doğal olarak kaybolana kadar sürdürülen dosyalar da, erken release edilmiş dosyalar da vardır
- Sönümün statik mi dinamik mi olduğu, sönüm katsayısının 1'den büyük olup olmamasına veya sönüm eğrisinden fazla sapıp sapmamasına göre ayrılır
- Zarfın release içerip içermediği, yani AS mi yoksa ASR mi olduğu, sustain ve release'in ortalama değişim oranları karşılaştırılarak belirlenir
- release'in değişim oranı daha düşükse release olmadığı kabul edilir
- Müzik dosyası işlenirken her nota frekansı için band-pass filter uygulanır
- Filtrelenmiş dalga biçiminde her enstrüman üzerinde dolaşılarak normalize edilmiş attack ve release çapraz korelasyonları hesaplanır ve sesin başlangıç ve bitişi bulunur
- Ardından enstrüman dalga biçimi ile filtrelenmiş sesin MSE'si hesaplanır ve ilgili andaki enstrüman maliyeti olarak kullanılır
- Nihai büyüklük, Fourier dönüşümü aşamasındaki büyüklük ile zarf aşamasındaki
1 / maliyetçarpılarak hesaplanır
Scatter plot tabanlı sonuç gösterimi
- Sonuçlar, matplotlib'in scatter plot özelliği kullanılarak
-biçimli noktalarla nota gibi gösterilir - Başlangıçta hesaplanan büyüklüklerden sesi yeniden üretmek hedeflenmişti ancak bu yaklaşım çok sorunlu, zaman alıcı ve hata ayıklaması zordu
- matplotlib'in imshow yöntemi de denendi fakat değerlerin çoğunun 0 olduğu durumda çok verimsiz kaldı
- Çünkü ekranda görünüp görünmediğine bakılmaksızın ekran kaydırma veya yakınlaştırma sırasında tüm noktaların yeniden çizilmesi gerekiyordu
- Sonuç olarak bu yöntem, nota tekrar üretimini iyileştirmede kullanılabilir; özellikle doğru perdeyi veya akorları bulmanın zor olduğu durumlarda yardımcı olur
- Örnek olarak YouTube videosu temel alınarak Noteflight notası yeniden üretildi
- Çalışma süresi de aşırı uzun değil
1 yorum
Hacker News yorumları
Başlık biraz kafa karıştırıcı. open-source separation diye yazınca kaynak ayırma (source separation) gibi okunuyor, ama aslında o değil; bu bir perde algılama algoritması ve algılanan perdenin hangi enstrümandan geldiğini sınıflandıran bir yöntem
Oldukça havalı, ama gerçekten doğru sonuçlar gerekiyorsa çıktıyı düzeltmek, her şeyi elle yapmaktan daha uzun sürebilir gibi görünüyor
O yaşta ortaya çıkarılmış bir iş olarak şaşırtıcı
Müzisyenlerin tek bir ses dosyasından miks öncesi orijinal parçalara yakın şeyleri, yani stem’leri geri elde etmeye çalıştığı durumlarda ikincisini daha sık duyuyorum gibi
Yazıda doğrudan bahsedildiğini görmedim ama ilgilenenler için otomatik müzik transkripsiyonu, yani sesi MIDI’ye dönüştürme alanı, deep learning ve müzik bilgi erişimi içinde oldukça büyük bir alt alan
Çok kanallı müzik transkripsiyonunda da başarılı birkaç model var; Google’ın MT3 projesi de bunlardan biri: https://research.google/pubs/mt3-multi-task-multitrack-music...
Piyano transkripsiyonu tarafında ise artık çok düşük kaliteli seste bile neredeyse kusursuza yakın doğruluğa gelindi: https://github.com/EleutherAI/aria-amt
Not: Yukarıdaki deponun yazarıyım
Ses-MIDI transkripsiyon sistemleri perdeyi ve başlangıç zamanını iyi tutturuyor, ancak uzunluk ve şiddet çok daha az kararlı
Daha kolay kullanmak için onların Colab’ını runtime’a portladım, ama MIDI çıktısı epey tuhaftı
Basit bir stem verdiğimde bile bazı parçalarda MIDI çıktısı ile ses iyi hizalanmıyor, zamanlama sorunları yüzünden kullanılamaz hale geliyordu; başka seslerde ise gayet düzgün çalışıyordu
Ses ayırma ya da stem ayırma ile ilgileniyorsanız RipX’e bakmaya değer: https://hitnmix.com/ripx-daw-pro/
Ayrılan parçaları MIDI dosyası olarak dışa aktarmak da mümkün. Hâlâ bazı sorunları var ama oldukça iyi çalışıyor
Stem ayırma artık müzik yazılımlarında standart bir özellik haline geliyor ve neredeyse her DAW bunu sunuyor
Benim yaptığım işlerde moises kullanması kolay geldi: https://moises.ai/
Şarkının tamamı için transpoze etmeyi veya time stretching’i destekliyor; stem ayırma ve parça bazında sessize alma/ses düzeyi ayarı için basit bir arayüzü var. Ölçüyü ve akorları otomatik algılıyor
İlgili biri değilim; şarkı öğrenmek ve pratik yapmak için neredeyse her gün kullanan memnun bir kullanıcıyım. Genelde bas partisini yükseltip geri kalanları %10’un altına indirerek bası net duyuyorum; bu da çevrimiçi notaların, ücretli olanlar dahil, ne kadar sık yanlış olduğunu çok iyi ortaya koyuyor. Partiyi öğrendikten sonra bası sessize alıp orijinal parçaya eşlik ederek basçı gibi çalıyorum
0: https://www.stemroller.com/
Ableton Live - yok
Bitwig - yok
Cubase - yok
FL - var
Logic - var
Pro Tools - yok
Reason - yok
Reaper - yok
Studio One - var
Polymath, MP3’lerden tek tek enstrüman parçalarını ayırıp çıkarmakta etkili ve çok iyi çalışıyor
Gerçekten harika, ama basit bir Fourier dönüşümü şablonu ile yakalanamayacak gerçek enstrüman fiziği var. Örneğin trompette aynı perde, zayıf üflendiğinde ve güçlü üflendiğinde çok farklı armonik spektrumlara sahip olabilir
Trompet, güçlü armonikleri olan zengin bir üst ton dizisi üretir; bu nedenle Fourier dönüşümünde temel frekansın tam sayı katlarında belirgin tepe noktaları görülür. Flüt gibi enstrümanlar daha saf tonlar çıkarır, ancak bakır üflemelilerde genellikle daha yüksek armonikler güçlü olduğundan yazıdaki matris denkleminin kısmi türevleri de daha karmaşık hale gelir
Bu script, bant geçiren filtreleme ve atak-release zarfının çapraz korelasyonuyla notaların zamanlamasını belirliyor. Bakır üflemeliler, çalma şiddetine bağlı olarak armonik bileşimi ciddi biçimde değişen doğrusal olmayan davranışlar gösterebildiğinden, pp ile ff arasında parlaklık değiştiğinde bu algoritmanın bunu nasıl ele alacağından emin değilim. Doğruluğu artırmak için enstrümana özel şiddete bağlı Fourier şablonları eklemeyi düşünürdüm
Enstrümanlar tipik seslerini çıkarmadığında veya enstrümanlar arası ayrım en üst düzeye çıkacak şekilde çalınmamış/mikslenmemiş gruplarda bu modellerin hepsi kötü çalışıyor. Örneğin bozulmuş armoniklere sahip bir elektro gitarın vokalle aynı notayı çalması, davulcunun zillerden yalnızca keskin gürültü çıkarması, basçının da enstrümanıyla kick drum benzeri vurmalı sesleri taklit etmesi gibi durumlar var
Bu tür deneysel müzikte source separation sonuçları tamamen öngörülemez hale geliyor; müzikal yeniden dengeleme için kullanılabilir de olabilir, olmayabilir de
Joshua Bird’ün kardeşinin yaptığı bir çalışma gibi görünüyor. Joshua Bird de daha önce HN’de yer alan etkileyici projeler yapmıştı: https://www.youtube.com/@joshuabird333
Yaklaşık 15 yıl önce Audiosurf oynadığım günleri hatırlattı. Zaman hızlı geçiyor.
https://en.wikipedia.org/wiki/Audiosurf
Yanlış görmüş olabilirim ama YouTube demolarının hiçbirinde kaynak ayrıştırma gösterilmiyor gibi görünüyor.
Ayrıca, ses araştırmalarında kaynak ayrıştırma, sesi ayrı kliplere ayırmak anlamına gelir.
Ultrastar Deluxe’ün eski bir hayranıyım. Singstar’ın açık kaynaklı klonu; insanların şarkılara eşlik edip yarıştığı bir karaoke oyunu.
Söylenen notaları algılayıp ilgili şarkının vokal zamanlama eşleme dosyasıyla karşılaştırıyor; melodiyi ne kadar iyi tutturursanız puanınız o kadar yüksek oluyor. Sözleri doğru bilip bilmediğiniz önemli değil.
Hayranların yaptığı birçok şarkı eşleme kütüphanesi var ama her zaman yetersiz kalıyor; İngilizce ve İspanyolca dışındaki dillerde eşlenmiş şarkı sayısı da çok az. Hepsini elle eşlemek çok zaman alıyor, üstelik ben de neredeyse tamamen detoneyim, bu yüzden daha da zor.
Uzun zamandır bu süreci daha kolay otomatikleştirebilecek yazılımın ne olacağını merak ediyordum; bu araç, orijinal kayıttan vokal zamanlamasını ve notaları çıkarmak için çok iyi görünüyor.
Bir gün ana dilimde bir Singstar çalma listesi yapıp arkadaşlarımla şarkı partisi düzenlemek yapılacaklar listemde. Benzer araç önerileri varsa duymak isterim.
Metin dosyasında zaman damgalarıyla birlikte vokal ve perde bilgisi gerekiyor gibi görünüyor; yapay zeka bunun oluşturulmasını otomatikleştirebilecek seviyeye yaklaşıyor.
Daha fazla okumak için az önce bulduğum bağlantıyı bırakıyorum: https://www.reddit.com/r/karaoke/comments/x61kzy/modern_equi...
Bana göre bazı videolarda ses yok gibi görünüyor.