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:
- (multi) Pitch-Schätzungs
- Instrumentenerkennung, timbral Modellierung
- Rhythmuserkennungs
- note Onset/Offset-Erfassungs
- 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
prüfen dies auch http://stackoverflow.com/questions/1628071/programmatically-listening-to-sound-signal-processing/1628241#1628241 –
möglich Duplikat [wav zu Midi-Konvertierung] (http://stackoverflow.com/questions/1897023/wav-to-midi-conversion) – finnw