2 Punkte von GN⁺ 2024-11-11 | 1 Kommentare | Auf WhatsApp teilen
  • Audio Decomposition ist ein Open-Source-Programm, das Audio in die enthaltenen Noten und Instrumente zerlegen soll, um Musik in Notenschrift zu übertragen
  • Instrumentensamples stammen aus der University of Iowa Electronic Music Studios instrument database; von jeder Wellenform werden die Fourier-Transformation und die Hüllkurve gespeichert und als Vergleichsgrundlage verwendet
  • Musikdateien werden in 0,1-Sekunden-Schritten analysiert, um ein Spektrogramm zu erzeugen; durch Kombination der gespeicherten Fourier-Transformationen pro Instrument wird die Größe jedes Instruments im jeweiligen Abschnitt geschätzt
  • Die Hüllkurvenanalyse trennt attack·sustain·release sowie statischen/dynamischen Abfall, berechnet dann in gefilterten Notenbändern die Kosten pro Instrument
  • Das Ergebnis wird nicht durch Audio-Rekonstruktion, sondern als matplotlib-Streudiagramm notenähnlich dargestellt, was Problemlösung und die Anzeige spärlicher Daten erleichtert

Audio-Zerlegung zur Umwandlung in Notenschrift

Fourier-Transformation in 0,1-Sekunden-Schritten

  • Es wird davon ausgegangen, dass sich Instrumentenklänge hauptsächlich durch Fourier-Transformation und Hüllkurve charakterisieren lassen; mit diesen beiden Informationen wird geschätzt, welches Instrument welche Note spielt
  • Für Musikdateien wird alle 0,1 Sekunden eine Fourier-Transformation durchgeführt und als Spektrogramm verarbeitet
  • Um die Fourier-Transformation jedes 0,1-Sekunden-Abschnitts zu reproduzieren, werden die gespeicherten Fourier-Transformationen der einzelnen Instrumente addiert
  • Die Größe pro Instrument wird durch Lösen der Matrix berechnet, die aus den partiellen Ableitungen der MSE-Kostenfunktion nach Frequenz entsteht
    • Jede Zeile der Matrix entspricht einer partiellen Ableitung für jedes Instrument wie cello, piano usw.
    • Das Beispiel ist eine Kostenberechnung für frequenzspezifische Werte wie etwa den Fourier-Transformationswert bei 5 Hz

Hüllkurve und Trennung der Tonabschnitte

  • Die Hüllkurve ist die Obergrenze der Wellenform; da bestehende Funktionen bei Rauschen oder bestimmten Wellenformen teils nicht gut funktionieren, wird ein separates Verfahren verwendet
  • Die Berechnung erfolgt, indem die Wellenform in Chunks aufgeteilt und pro Chunk der Maximalwert genommen wird
  • Danach wird das Ergebnis verfeinert, indem neue Punkte an Stellen hinzugefügt werden, an denen die Hüllkurve unter der ursprünglichen Wellenform liegt
  • Die Hüllkurve wird in attack, sustain und release unterteilt
    • attack: der anfängliche Klang der Note
    • sustain: der Abschnitt, in dem der Ton gehalten wird
    • release: der Abschnitt, in dem der Ton endet
  • Bei Instrumentensamples wird der erste von 0 verschiedene Wert als Startpunkt von attack verwendet
  • Die Grenze zwischen attack und sustain wird als der erste Punkt festgelegt, an dem die Funktion erstmals konkav nach unten ist oder abnimmt
  • Die Grenze zwischen sustain und release wird vom Ende her als der erste Punkt bestimmt, an dem die Funktion zunimmt oder konkav nach unten ist
  • Das Ende von release wird vom Ende her als der erste Punkt gefunden, der nicht 0 ist

Abfalltypen und Instrumenten-Matching

  • Um die Hauptformen der Wellenform zu unterscheiden, werden statischer Abfall und dynamischer Abfall berücksichtigt
  • Einige Instrumente wie piano haben statischen Abfall, der meist einem exponentiellen Abfall entspricht
  • Einige Instrumente wie violin können während sustain in der Lautstärke zu- oder abnehmen
  • Unter den Instrumentensamples gibt es Dateien, die gehalten werden, bis der Klang natürlich verklingt, und andere, die früh in release übergehen
  • Ob der Abfall statisch oder dynamisch ist, wird danach unterschieden, ob der Abfallkoeffizient größer als 1 ist oder zu stark von der Abfallkurve abweicht
  • Ob die Hüllkurve ein release hat, also AS oder ASR ist, wird durch Vergleich der mittleren Änderungsrate von sustain und release beurteilt
    • Ist die Änderungsrate von release geringer, wird davon ausgegangen, dass kein release vorliegt
  • Bei der Verarbeitung von Musikdateien wird für jede Notenfrequenz ein Bandpassfilter angewendet
  • Für die gefilterte Wellenform werden alle Instrumente durchlaufen; durch Berechnung der normalisierten Kreuzkorrelation von attack und release werden Anfang und Ende des Tons gefunden
  • Anschließend wird die MSE zwischen der Instrumentenwellenform und dem gefilterten Audio berechnet und als Instrumentenkosten für diesen Zeitpunkt verwendet
  • Die endgültige Größe wird berechnet, indem die Größe aus dem Fourier-Transformationsschritt mit 1 / Kosten aus dem Hüllkurvenschritt multipliziert wird

Ergebnisdarstellung auf Basis von Streudiagrammen

  • Das Ergebnis wird mit einem scatter plot von matplotlib als --förmige Punkte notenähnlich dargestellt
  • Ursprünglich sollte Audio aus den berechneten Größen rekonstruiert werden, doch das war problematisch, zeitaufwendig und schwer zu debuggen
  • imshow von matplotlib wurde ebenfalls ausprobiert, war bei einer Situation mit überwiegend 0-Werten aber sehr ineffizient
    • Beim Verschieben oder Zoomen des Bildschirms mussten nämlich immer alle Punkte neu gezeichnet werden, unabhängig davon, ob sie sichtbar waren oder nicht
  • Das Ergebnis kann daher gut zur besseren Rekonstruktion von Notenschrift genutzt werden, besonders wenn es schwierig ist, die richtige Tonhöhe oder Akkorde zu finden
  • Als Beispiel wurde es verwendet, um auf Basis eines YouTube-Videos eine Noteflight-Partitur zu reproduzieren
  • Auch die Laufzeit bleibt in einem vertretbaren Rahmen

1 Kommentare

 
GN⁺ 2024-11-11
Meinungen auf Hacker News
  • Der Titel ist etwas verwirrend. Wenn man open-source separation schreibt, liest es sich wie Source Separation, tatsächlich geht es aber nicht darum, sondern um einen Pitch-Erkennungsalgorithmus, der klassifiziert, von welchem Instrument der erkannte Pitch stammt.
    Ziemlich cool, aber wenn man wirklich genaue Ergebnisse braucht, könnte es so aussehen, als würde das Korrigieren der Ausgabe länger dauern als die manuelle Arbeit.

    • Fairerweise muss man dem Autor zugutehalten, dass er noch Schüler ist: https://matthew-bird.com/about.html
      Für etwas, das in dem Alter entstanden ist, ist das erstaunlich.
    • Ich frage mich, ob source separation normalerweise eher stem separation genannt wird oder ob das ein anderes Konzept ist.
      Wenn Musiker versuchen, aus einer einzelnen Audiodatei etwas wiederherzustellen, das den ursprünglichen Tracks vor dem Mixing nahekommt, also Stems, höre ich Letzteres offenbar häufiger.
    • Wegen des Bindestrichs ist diese Art von Mehrdeutigkeit meiner Ansicht nach vollständig beseitigt.
  • Ich habe nicht gesehen, dass es im Artikel direkt erwähnt wird, aber für Interessierte ist automatische Musiktranskription, also Audio in MIDI umzuwandeln, ein ziemlich großes Teilgebiet von Deep Learning und Music Information Retrieval.
    Auch bei der Multitrack-Musiktranskription gab es mehrere erfolgreiche Modelle, darunter Googles MT3-Projekt: https://research.google/pubs/mt3-multi-task-multitrack-music...
    Bei Klaviertranskription ist man inzwischen selbst bei Audio in sehr schlechter Qualität fast bei perfekter Genauigkeit angekommen: https://github.com/EleutherAI/aria-amt
    Nebenbei: Ich bin der Autor des obigen Repositories.

    • Hier versucht man außerdem, ein weiteres, ebenfalls ziemlich schwieriges Problem zu lösen. Aus MIDI-Daten eine korrekte Partitur abzuleiten ist so ein Problem, das „leicht aussieht, es aber in Wirklichkeit nicht ist“.
      Audio-zu-MIDI-Transkribierer treffen Pitch und Startzeit recht gut, aber Dauer und Anschlagsstärke sind deutlich weniger stabil.
    • Ich weiß, dass die für MT3 berichteten Scores sehr gut sind, frage mich aber, ob es auch bei eigener Nutzung erfolgreich war: https://replicate.com/turian/multi-task-music-transcription
      Um es einfacher nutzbar zu machen, habe ich ihr Colab auf eine Runtime portiert, aber die MIDI-Ausgabe war ziemlich seltsam.
      Selbst bei einfachen Stems passten manche Tracks in der MIDI-Ausgabe wegen Timing-Problemen nicht gut zum Audio und waren unbrauchbar; bei anderem Audio funktionierte es wiederum ordentlich.
    • Ich frage mich, inwiefern sich dieses Problem vereinfacht, wenn man es auf Klavier beschränkt.
  • Wenn man sich für Audio-Separation oder Stem Separation interessiert, lohnt sich ein Blick auf RipX: https://hitnmix.com/ripx-daw-pro/
    Die getrennten Tracks lassen sich auch als MIDI-Dateien exportieren. Es gibt noch ein paar Probleme, aber es funktioniert ziemlich gut.
    Stem Separation wird inzwischen zu einer Standardfunktion in Musiksoftware, und fast jede DAW bietet sie an.

    • RipX macht Stem Separation und erlaubt es, Tonhöhen innerhalb des Mixes nachträglich anzupassen; wenn das das Ziel ist, ist es großartig.
      Für meine Arbeit war moises einfacher zu benutzen: https://moises.ai/
      Es unterstützt Transponierung und Time-Stretching ganzer Songs und hat eine einfache Oberfläche für Stem Separation sowie Stummschalten und Lautstärkeregelung pro Track. Takt und Akkorde werden automatisch erkannt.
      Ich habe keine Verbindung dazu, sondern bin nur ein zufriedener Nutzer, der es fast täglich zum Lernen und Üben von Songs verwendet. Normalerweise drehe ich den Basspart hoch und senke den Rest auf unter 10 % Lautstärke, um den Bass klar zu hören; dabei sieht man sehr gut, wie oft Online-Noten, auch kostenpflichtige, falsch sind. Nachdem ich den Part gelernt habe, schalte ich den Bass stumm und spiele wie ein Bassist zur Originalaufnahme mit.
    • Stemroller[0] gibt es ebenfalls schon eine Weile, es ist kostenlos und basiert auf einem Meta-Modell.
      0: https://www.stemroller.com/
    • Es ist weniger so, dass „fast jede DAW sie anbietet“, sondern eher eine aufkommende Funktion, die fast jede DAW haben sollte, die die meisten aber noch nicht haben.
      Ableton Live – nein
      Bitwig – nein
      Cubase – nein
      FL – ja
      Logic – ja
      Pro Tools – nein
      Reason – nein
      Reaper – nein
      Studio One – ja
    • Scheint mit Polymath verwandt zu sein: https://github.com/samim23/polymath
      Polymath ist effektiv darin, einzelne Instrumentenspuren aus MP3s zu trennen und zu extrahieren, und funktioniert sehr gut.
  • Wirklich cool, aber es gibt reale Instrumentenphysik, die sich mit einfachen Fourier-Transform-Templates nicht erfassen lässt. Bei einer Trompete kann sich zum Beispiel das Obertonspektrum bei gleicher Tonhöhe stark unterscheiden, je nachdem, ob sie leise oder laut gespielt wird.
    Eine Trompete erzeugt eine reiche Obertonreihe mit starken Obertönen, sodass in der Fourier-Transformation deutliche Peaks bei ganzzahligen Vielfachen der Grundfrequenz erscheinen. Instrumente wie Flöten erzeugen reinere Töne, aber Blechblasinstrumente haben typischerweise stärkere höhere Obertöne, wodurch auch die partiellen Ableitungen der im Artikel gezeigten Matrixgleichung komplexer würden.
    Dieses Skript identifiziert das Timing von Noten über Bandpassfilterung und Kreuzkorrelation von Attack- und Release-Hüllkurven. Da Blechblasinstrumente je nach Spielstärke ein nichtlineares Verhalten mit stark veränderter Obertonzusammensetzung zeigen können, bin ich nicht sicher, wie dieser Algorithmus mit unterschiedlicher Klanghelligkeit bei pp und ff umgehen würde. Um die Genauigkeit zu erhöhen, würde ich erwägen, instrumentenspezifische dynamikabhängige Fourier-Templates hinzuzufügen.

    • Als jemand, der zweimal pro Woche Source Separation fürs Mixing nutzt: Es gibt sehr viele Instrumente, die eine Klangfarbe wie „Gesang“ erzeugen können.
      Wenn Instrumente nicht ihren typischen Klang erzeugen oder eine Band nicht so gespielt und gemischt wurde, dass die Trennung zwischen Instrumenten maximiert wird, funktionieren all diese Modelle nicht gut. Zum Beispiel kann eine E-Gitarre mit verzerrten Obertönen dieselbe Note wie der Gesang spielen, der Drummer erzeugt auf den Becken nur scharfes Rauschen, und der Bassist imitiert mit seinem Instrument einen perkussiven Kickdrum-Sound.
      Bei solcher experimenteller Musik werden die Ergebnisse der Source Separation völlig unvorhersehbar und können für musikalisches Rebalancing brauchbar sein oder auch nicht.
  • Sieht nach einer Arbeit aus, die Joshua Birds Bruder gemacht hat. Auch Joshua Bird hatte früher beeindruckende Projekte auf HN: https://www.youtube.com/@joshuabird333

    • Stimmt, Matt ist Joshs Bruder. Erstaunlich und sehr erfreulich, dass du das bemerkt hast.
  • Ich musste daran denken, wie ich vor etwa 15 Jahren Audiosurf gespielt habe. Die Zeit vergeht schnell
    https://en.wikipedia.org/wiki/Audiosurf

  • Vielleicht habe ich etwas übersehen, aber keines der YouTube-Demos scheint Source Separation zu zeigen
    Ergänzend: In der Audioforschung bedeutet Source Separation, Audio in separate Clips aufzuteilen.

    • Hier scheint Zerlegung das passendere Wort zu sein. In diesem Fall scheint „source separation“ so gemeint zu sein, dass die zerlegten Noten verschiedenen Quellen zugeordnet werden können, aber der Ausdruck ist irreführend.
    • „Source“ scheint hier im Sinn von „Open Source“ gemeint zu sein.
  • Ich bin seit Langem Fan von Ultrastar Deluxe. Das ist ein Open-Source-Klon von Singstar, ein Karaoke-Spiel, bei dem Leute Songs mitsingen und gegeneinander antreten
    Es erkennt die gesungenen Töne und vergleicht sie mit einer Mapping-Datei für Vocal-Timing des jeweiligen Songs; je besser man die Melodie trifft, desto höher die Punktzahl. Ob man den Text genau richtig singt, ist nicht wichtig.
    Es gibt zwar viele von Fans erstellte Bibliotheken mit Song-Mappings, aber es sind immer zu wenige, und für andere Sprachen als Englisch und Spanisch gibt es nur sehr wenige gemappte Songs. Alles von Hand zu mappen ist sehr zeitaufwendig, und da ich selbst praktisch unmusikalisch bin, ist es noch schwieriger.
    Ich habe mich schon lange gefragt, welche Software diesen Prozess leichter automatisieren könnte, und dieses Tool sieht sehr gut dafür aus, aus dem Originalsong Vocal-Timing und Tonhöhen zu extrahieren.
    Irgendwann eine Singstar-Playlist in meiner Muttersprache zu erstellen und mit Freunden eine Gesangsparty zu veranstalten, steht auf meiner Bucket List. Falls jemand ähnliche Tools empfehlen kann, würde mich das interessieren.

    • Schön. Ich wusste nicht, dass es so etwas gibt.
      Die Textdatei scheint Vocals und Pitch zusammen mit Zeitstempeln zu brauchen, und KI kommt offenbar nahe daran, deren Erstellung automatisieren zu können.
      Hier ein Link, den ich gerade gefunden habe, um weiterzulesen: https://www.reddit.com/r/karaoke/comments/x61kzy/modern_equi...
  • Für mich wirken einige der Videos so, als hätten sie kein Audio

    • In den YouTube-Links steht der Grund. Dort heißt es „kein Audio wegen Urheberrecht“, und es gibt auch einen Audio-Link, den man parallel abspielen kann.