2009-03-30 8 views
16

Gibt es eine Musikdatei, ist es möglich, jedes gespielte Instrument aufzuteilen? I.e. Sagen wir, ich habe songSong.mp3, und in diesem Song gibt es Gesang, Gitarre, Bass und Schlagzeug. Ich möchte 4 "Spuren" bekommen - eine für jedes einzelne Instrument.Unterscheiden von Instrumenten in einer Musikdatei

Ich vermute, dass es fast unmöglich ist, dies zu tun, da sich Instrumente überlappen können, und es ist notorisch schwierig, überlappende Stimmen zu unterscheiden, geschweige denn Instrumente.

Aber ist da ist eine Bibliothek oder ein Algorithmus, oder EINIGE Möglichkeit, dies zu tun, wäre ich neugierig zu hören, wie.

+0

Dies ist ein schweres Problem! Ich glaube nicht, dass es Software gibt, die automatisch zuverlässig erkennen kann, welche Noten in einer gemischten Aufnahme gespielt werden, geschweige denn, Instrumente in Spuren zu trennen. – Miles

+0

-no-anser --- hast du dein Problem gelöst? woran arbeitest du? Vielleicht haben wir eine Überlappung – relascope

Antwort

27

Mein Undergraduate-Projekt beschäftigt sich mit dem Transkribieren von Noten aus einer WAV-Datei in eine MIDI-Datei. Wir haben nur den einfachen Fall eines Instruments behandelt, möglicherweise mehr als eine Note gleichzeitig (ein Klavier zum Beispiel). Unsere Forschung zu dem Thema, bevor wir anfingen, zeigte, dass sogar dieses (d. H. Nur ein Instrument) als nicht-trivial angesehen wird. Grundsätzlich ist das Problem:

  • finden Sie, welche Frequenzen zu einem bestimmten Zeitpunkt spielen. Dies kann durch eine DFT/FFT von kleinen Fenstern nacheinander erfolgen.
  • Verwenden Sie eine Heuristik, um zu erraten, welche Frequenzen Harmonien der gleichen Note sind und welche zu verschiedenen Noten gehören. Dieses kann einfach sein, wenn Sie wissen, welches Instrument spielt, aber es ist im allgemeinen Fall schwierig, weil die Größen jeder Harmonie durch Instrument unterschiedlich sind. Zum Beispiel könnten Sie zwei Cs eine Oktave von einem Instrument entfernt haben, oder Sie könnten ein C haben, aber von einem anderen Instrument.
  • Wenn Sie wissen, welche Noten zu jeder Zeit gespielt werden, müssen Sie raten, wann Sie in den Noten Pausen haben. Sie könnten eine lange Note oder eine Reihe kurzer Noten haben. Abhängig von der Größe der Fenster, die Sie für die anfängliche DFT verwendet haben, können Sie hier unterschiedliche Ergebnisse erzielen.

Nun, wenn Sie zu einem Zeitpunkt mehr als ein Instrument haben, und keine zwei sind die gleichen Noten oder Harmonien davon auf einmal zu spielen, Sie könnte der Lage sein, die Instrumente zu unterscheiden einige Heuristik auf der Größen der Harmonien oder der Notenfolgen, die sie spielen. Höchstwahrscheinlich wird es Zeiten geben, in denen zwei Instrumente die gleiche Note spielen. Dann haben Sie nicht wirklich die Möglichkeit zu entscheiden, ob (a) ein Instrument die Note spielt, (b) zwei Instrumente mit der gleichen Lautstärke spielen, (c) die eine weich und die andere laut oder (d) anspielt Kombination davon.

Wie auch immer, das ist die kurze Liste der zu lösenden Probleme. Ich kenne keinen Algorithmus, der dies im allgemeinen Fall löst. Ich glaube nicht, dass dieses Problem schon gelöst ist.

Edit: Meine Projektpräsentation können bei http://www-sipl.technion.ac.il/new/Archive/Special_Events/sipl2004/Projects_PowerPoint/WAV-to-MIDI.pdf

+0

Schöne Beschreibung des Problems, BTW. – dmckee

+0

Danke für die interessante Antwort. Ich werde es als die akzeptierte Antwort markieren, obwohl es das Problem nicht technisch LÖSEN, es bietet einige sehr interessante Denkanstöße. Vielen Dank! :) – FreeMemory

+0

Ich denke, dass Sie das Wort "Harmonie" verwendet haben, wo Sie "harmonisch" verwenden wollten. – Mud

1

Der einfachste Weg, dies zu tun, besteht darin, die Instrumente an erster Stelle zu halten. Aus diesem Grund verwenden viele intermediäre Musikverarbeitungsanwendungen MIDI, um Instrumentennachrichten in abstrakter Form auf separaten Spuren zu speichern.

2

Jedes Instrument hat eine charakteristische Störschwingung. Wenn Sie also einzelne Noten (mit einer DFT/FFT) isolieren und die anderen Frequenzen zu diesem Zeitpunkt vergleichen, können Sie mindestens verschiedene Arten von Instrumenten unterscheiden.

+0

Ich glaube nicht, dass Sie mit nur DFTs sehr weit kommen werden, aber das ist die einzige Antwort, die ich bis hierhin sogar als entfernt ansehen würde. Die Trennung von vielen Instrumenten ist ohne Zweifel eine wirklich harte Signalverarbeitungsaufgabe. Sie könnten etwas Glück haben, verschiedene Frequenzen herauszusuchen, aber das ist es. –

+1

DFT/FFT hat nicht genug Auflösung, um Bass-Noten zu trennen, es sei denn, Sie machen Ihr FFT-Fenster * sehr * groß. Und es macht keinen Zauber, die Obertöne verschiedener Noten, die gleichzeitig gespielt werden, auseinander zu nehmen. –

+0

Dies ist besonders bei der Aufnahme von echten Instrumenten (im Gegensatz zu synthetisierten Signalen) schwierig, aber es scheint der sauberste Ansatz zu sein, wenn man * nur * versuchen muss, eine einzelne Spur auseinander zu nehmen. Nicht einfach. – dmckee

-1

mp3 ist ein verlustbehaftetes Format. Es funktioniert, indem es die akustische Antwort einer Person modelliert und Informationen wegwirft, von denen sie glaubt, dass sie nicht gehört werden können. Im Wesentlichen lauter Instrumente, die weiche Instrumente überschatten - der weichere wird verworfen. Dies bedeutet, dass Sie nie in der Lage sein werden, das zu extrahieren, was ursprünglich in die mp3-Datei gegangen ist, geschweige denn die Instrumente zu trennen.

Ich habe einen Freund, der ein Toningenieur ist und er muss immer "Nein" zu Leuten sagen, die ihn bitten, einen als mp3 aufgenommenen Track neu zu konstruieren.

Vor ein paar Wochen sah ich eine Studie, die nahelegte, dass die jüngere Generation den Klang von MP3s gegenüber vollständigeren Formaten vorzog, da sie damit aufgewachsen waren.

+0

Ich wäre bereit, mich für ein nicht verlustfreies Format wie OGG zu entscheiden. Im Wesentlichen: jedes allgemein verfügbare Format. – FreeMemory

+0

Dann würde ich Tstenners Ansatz vorschlagen. Holen Sie die Musik in die Zeitdomäne, konvertieren Sie sie in die Frequenzdomäne, suchen Sie nach Frequenzbändern und versuchen Sie dann, sie mit Noten aus separaten Instrumenten abzugleichen. Klingt wie ein Forschungsprojekt für mich! –

0

Lange Rede, kurzer Sinn: Das können Sie nur, wenn Ihre vier Instrumente Synthesizer sind, die reine Sinuswellen spielen.

+0

Reine Sinuswellen werden (theoretisch) nicht benötigt. Sie müssen die * linear unabhängige * Verteilung der Harmonischen für jedes Instrument kennen. Und Sie müssen genügend Daten für jede Note haben, was einige Einschränkungen für die Komplexität und Ähnlichkeit der Distributionen mit sich bringt. – dmckee

8

Ich habe tatsächlich in einem sehr interessanten Algorithmus ICA (Independent Component Analysis) genannt gestoßen zu finden. Das Konzept hinter diesem Algorithmus stammt nicht aus der Signalverarbeitungswelt, sondern aus probabilistischen Theorien. Wir haben es verwendet, um zwei Songs zu trennen, die in einzelne mp3-Dateien gemischt wurden. Sie können eine Implementierungsbibliothek in Matlab \ C++ \ Python namens FastICA here finden. Probieren Sie es aus, es ist wirklich nett.

+0

Direktere gibt es eine Implementierung in 'sklearn' (siehe [hier] (http://scikit-learn.org/dev/auto_examples/decomposition/plot_ica_blind_source_separation.html)) – MichaelChirico

Verwandte Themen