Wav-zu-Midi-Konvertierung

8

Ich bin neu in diesem Bereich - aber ich muss eine WAV-zu-MIDI-Konvertierung in Java durchführen. Gibt es eine Möglichkeit zu erfahren, welche Schritte genau bei der WAV-zu-MIDI-Konvertierung erforderlich sind? Ich habe eine sehr grobe Idee, wie Sie es brauchen; Sample die WAV-Datei, filtere sie, verwende FFT für die Spektralanalyse, Feature Extraction und schreibe dann die extrahierten Features auf MIDI. Aber ich kann keine soliden Quellen oder Papiere finden, wie in all dem? Kann mir jemand Hinweise geben, wie und wo ich anfangen soll? Gibt es Open-Source-APIs für diesen WAV-zu-MIDI-Konvertierungsprozess?

Vielen Dank

    
Dolphin 24.01.2010, 06:36
quelle

5 Antworten

26

Es ist ein komplizierterer Prozess als Sie sich vorstellen können.

Dieses Forschungsproblem wird oft als Musiktranskription bezeichnet: das Umwandeln einer Low-Level-Darstellung von Musik (z. B. Wellenform) in eine höhere Darstellung wie MIDI oder sogar Noten .

Die Komplexität Ihrer Lösung hängt von der Komplexität Ihrer Eingabedaten ab. Tonnenweise Forschungsarbeiten befassen sich mit der Transkription von Musik nur auf monophonem Piano oder Schlagzeug ... weil sie einfach zu transkribieren sind. (Relativ.) Violine ist härter. Die Stimme ist noch härter. Violine plus Stimme plus Klavier ist viel schwieriger. Eine Symphonie ist fast unmöglich. Du bekommst das Bild.

Die grundlegenden Elemente der Musiktranskription umfassen einen der folgenden überlappenden Bereiche:

  1. (Mehr-) Tonhöhenschätzung
  2. Instrumentenerkennung, Timbral-Modellierung
  3. Rhythmuserkennung
  4. Note Onset / Offset Erkennung
  5. Formular- / Strukturmodellierung

Suchen Sie in Google Scholar oder in der ISMIR-Dokumentation nach "Musik-Transkription": Ссылка . Wenn Sie sich mehr für eines der oben genannten Unterthemen interessieren, kann ich Ihnen weiterhelfen. Viel Glück.

EDIT: Davon abgesehen gibt es bestehende Lösungen, die wir alle im Internet finden können. Fühlen Sie sich frei, sie auszuprobieren. Analysieren Sie sie jedoch mit kritischem Auge und Ohr. Welche Arten von Audiosignalen würden dazu führen, dass die Transkription fehlschlägt?

EDIT 2: Ah, Sie machen das nur für Klavier. Okay, das ist machbar. Die Transkription von Musik ist so weit fortgeschritten, dass sie monophones Klavier ziemlich gut transkribieren kann. Ein Rachmaninov-Konzert wird immer noch Probleme bereiten.

Unsere Empfehlungen hängen von Ihrem Endziel ab. Sie geben " müssen für die Durchführung ... in Java an." Es klingt also so, als ob du nur willst, dass etwas funktioniert, egal wie du es hinbekommst. In diesem Fall stimme ich zu 100% mit anderen überein: benutze etwas, das existiert.

Das ist eigentlich eine interessante Frage; Alle MIR-Bibliotheken, die ich kenne, sind typischerweise C / C ++ / Python / Matlab. Aber nicht Java. Das EchoNest hat eine Java-API, aber ich denke nicht, dass es eine Transkription auf Notenebene gibt. Ссылка . (Bearbeiten: Es tut Note-Level-Transkription. Die zurückgegebenen Daten gehören Tonhöhe, Timbre, Beat, Tatum und mehr. Aber ich finde, Polyphonie ist immer noch ein Problem.)

Oh, Marsyas ist Java-basiert. Cool. Ich dachte, es wäre nur C ++. Ссылка Ich empfehle dies. Es wurde von George Tzanetakis, einem Professor in MIR, entwickelt. Es ist Signal-Level-Analyse und sollte eine gute Option sein.

Nun, wenn dies für eine unterhaltsame Lernerfahrung ist, denke ich, dass Sie die Audiobearbeitungswerkzeuge in Java verwenden können, um mit dem WAV-Signal zu experimentieren und zu sehen, was herauskommt.

EDIT: Diese Seite beschreibt MIR-Software besser als ich: Die Tools, die wir verwenden

Für Matlab könnten Sie an der MIR Toolbox interessiert sein

Hier finden Sie eine schöne Seite mit häufigen Datasets: MIR Datasets

    
Steve Tjoa 24.01.2010, 06:57
quelle
4

Dies ist ein sehr großes Unterfangen, um auf dem Gebiet neu zu sein, es sei denn, Sie meinen, Sie sind mit der Signalanalyse und der Merkmalserkennung im Allgemeinen vertraut und möchten die automatische Transkription genauer betrachten.

Es gibt keine API für die Umwandlung von WAV in MIDI. Vamp ist ein Framework für Feature-Extraction-Plugins, aber für die automatische Transkription müssen Sie alle Funktionen der vorhandenen Plugins verwenden , und implementieren Sie Funktionalität, die in keinem von ihnen vorhanden ist.

Durchsuchen Sie die Beschreibungen der Plugins auf der Vamp-Download-Seite , alle Beschreibungen, die Sie nicht verstehen, sind Themen, die Sie sollten fange an zu recherchieren, wenn du das machen willst.

    
Justin Smith 24.01.2010 07:38
quelle
3

Wenn Sie diese Aufgabe nicht automatisieren müssen (z. B. für eine Website, auf der Personen MP3s hochladen und MIDI-Dateien zurückholen können), sollten Sie ein Tool wie Melodyne das ist schon ziemlich gut darin. Wie Steve bemerkte, ist dies eine sehr schwierige Aufgabe, und selbst die besten derzeit verfügbaren Algorithmen und Lösungen sind nicht zu 100% zuverlässig.

Wenn Sie also nur im Studio arbeiten und ein paar Conversions durchführen müssen, sparen Sie wahrscheinlich ein wenig Zeit (und eine Menge Kopfschmerzen), um ein Tool zu verwenden, das bereits für diese Aufgabe entwickelt wurde.

    
Nik Reiman 24.01.2010 10:33
quelle
1

Delphin, tut mir leid, ich bin schroff, aber Sie haben das Problem völlig unterschätzt. Was Sie erreichen wollen - eine vollständige Transkription des Klavierklangs mit allen Parametern, die während des Spiels verwendet wurden, würde eine enorme Menge an Forschung mit Leuten erfordern, die jahrelang in diesem Bereich gearbeitet haben. Selbst eine Gruppe von Doktoranden in der Signalverarbeitung müsste viel Arbeit investieren, um dem, was Sie meinen, sogar nahe zu kommen. Musiktranskription hat jahrzehntelange Arbeit gebraucht, um sogar halbwegs zuverlässig arbeiten zu können. Ich würde vorschlagen, dass Sie ein anderes Problem auswählen, das Sie besser als das verwalten können.

    
Thorsten79 24.01.2010 14:56
quelle
1

Dies ist ein Bereich, der immer noch in der Entwicklung ist, aber es gibt einige (experimentelle) Algorithmen.

Sie können Sonic Annotator installieren und ein paar Vamp Plugins verwenden.

Zum Beispiel:

%Vor%     
dorien 19.08.2015 17:17
quelle