2010-01-24 7 views
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, als in Sie müssen; Sample die WAV-Datei, filtern Sie es, verwenden Sie FFT für Spektralanalyse, Feature-Extraktion und schreiben Sie 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?wav-to-midi Konvertierung

Vielen Dank

+0

prüfen dies auch http://stackoverflow.com/questions/1628071/programmatically-listening-to-sound-signal-processing/1628241#1628241 –

+0

möglich Duplikat [wav zu Midi-Konvertierung] (http://stackoverflow.com/questions/1897023/wav-to-midi-conversion) – finnw

Antwort

26

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

Dieses Forschungsproblem wird oft als Musiktranskription bezeichnet: der Vorgang der Umwandlung 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 Grundelemente der Musiktranskribierung beinhalten beliebige der folgenden überlappenden Bereichen:

  1. (multi) Pitch-Schätzungs
  2. Instrumentenerkennung, timbral Modellierung
  3. Rhythmuserkennungs
  4. note Onset/Offset-Erfassungs
  5. Formular-/Strukturmodellierung

Suchen Sie in Google Scholar nach Artikeln zu "Musiktranskription" oder aus dem ISMIR-Verfahren: http://www.ismir.net. Wenn Sie sich mehr für eines der oben genannten Unterthemen interessieren, kann ich Ihnen weiterhelfen. Viel Glück.

EDIT: Das heißt, es gibt 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, du machst 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 an: "muss ausgeführt werden ... in Java." 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. http://developer.echonest.com. (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++. http://marsyas.info/ Ich empfehle das. Es wurde von George Tzanetakis, einem Professor in MIR, entwickelt. Es führt Signal-Level-Analyse und sollte eine gute Option sein.

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

EDIT: Diese Seite beschreibt MIR Software besser als ich kann: The Tools We Use

Für Matlab, die Sie in der eine schöne Seite von gemeinsamen Datensätze MIR Toolbox

Hier interessiert sein kann, ist: MIR Datasets

+0

Danke für Ratschläge Steve. Ich plane Wav-to-Midi nur für Klavierauftritte.Ich dachte, die Musik-Transkription erzeugt nur eine digitale Musik-Punktzahl - danke, dass du mich korrigiert hast. Ich muss ein Klavierstück eines Musikstücks aufnehmen und daraus eine Midi - Datei erzeugen (Midi - Datei aus der WAV - Datei), die die meisten musikalischen Merkmale aus Tonhöhe, Dynamik, Timing, Rhythmus, Phrasierungen, Tönen, Artikulation etc zur Verarbeitung verwendet werden. Es ist möglich, diese direkt von midi zu erfassen, aber von wav aus kann ich nicht von Anfang an denken. Ich muss die Bereiche erforschen, die du zuerst gesagt hast - danke Steve – Dolphin

+0

Muss ich Matlab für diesen Prozess verwenden und mich in Java integrieren? Fortschritt danke Steve. Du hast wirklich das größere Bild gemalt. – Dolphin

+1

Gern geschehen. Siehe meine Antwort auf Kommentare im ursprünglichen Beitrag. –

4

Diese Es ist ein sehr großes Unterfangen, neu auf diesem Gebiet zu sein, es sei denn, Sie meinen, Sie sind mit der Signalanalyse und der Erkennung von Merkmalen 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 um eine automatische Transkription durchzuführen, müssten Sie alle Funktionen der vorhandenen Plugins nutzen und Funktionen implementieren, die in keinem von ihnen vorhanden sind.

Durchsuchen Sie die Beschreibungen der Plugins auf the vamp download page, alle Beschreibungen, die Sie nicht verstehen, sind Themen, die Sie erforschen sollten, wenn Sie dies tun möchten.

+0

Danke für die Vorschläge Smith. Zumindest weiß ich jetzt, dass es keinen Sinn macht, nach APIs zu suchen, die das tun. Können Sie Plug-Ins mit Java-Code verwenden? Feature Extraction - Muss ich Algorithmen verwenden? Nur weil ich einen Algorithmus kenne, wie kann ich ihn zum Code schreiben? Muss ich Matlab verwenden und in eine Sprache (Java) integrieren? Kannst du mir bitte ein Bild geben? Danke nochmal Smith – Dolphin

+1

Vamp nutzt C, C++. Gibt es keine Java-Plugins und solche Ressourcen? Das wäre am nützlichsten. Wie können Sie Plug-Ins in Java-Code verwenden? Advance thanks – Dolphin

+1

Java wird in der Signalverarbeitung/-analyse nicht so oft gesehen, weil es relativ CPU-intensiv ist, und bis vor kurzem war die Hardware nicht schnell genug, um dies mit akzeptablen Geschwindigkeiten in Java zu tun. Es sieht so aus, als hätte Steve einen guten Lead gefunden. Für einen Ansatz auf höherer Ebene gibt es auch die Möglichkeit, eine Umgebung wie csound http://csounds.com/ zu verwenden, die eine große Anzahl von Werkzeugen zum Synthetisieren und Analysieren von Sound mit weniger Bedenken hinsichtlich expliziter Speicherzuweisung und -freigabe bietet, als sie erhalten würden C. –

3

Wenn Sie diese Aufgabe nicht automatisieren müssen (dh für eine Website, wo die Menschen MP3 hochladen und bekommen MIDI zurück Dateien), dann sollten Sie ein Tool wie Melodyne betrachten verwendet, die bereits an geht das ganz gut. Wie Steve bemerkte, ist dies eine sehr schwierige Aufgabe, und selbst die besten Algorithmen und Lösungen, die gegenwärtig zur Verfügung stehen, 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 viele Kopfschmerzen), um ein Tool zu verwenden, das bereits für diese Aufgabe entwickelt wurde.

1

Delphin, tut mir leid, brüsk sein, 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 schlage vor, Sie wählen ein anderes Problem, das Sie besser als das verwalten können.

1

Dies ist ein Feld, das 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:

./sonic-annotator file.wav -d vamp:qm-vamp-plugins:qm-transcription:transcription -w midi 

./sonic-annotator file.wav -d vamp:silvet:silvet:notes -w midi 

./sonic-annotator file.wav -d vamp:ua-vamp-plugins:mf0ua:mf0ua -w midi