2013-12-22 5 views
7

Ich versuche, Tonhöhenfunktionen aus einer Audiodatei zu extrahieren, die ich für ein Klassifizierungsproblem verwenden würde. Ich benutze Python (scipy/numpy) für die Klassifizierung.Extrahieren von Tonhöhenfunktionen aus Audiodatei

Ich denke, ich kann Frequenzfunktionen mit scipy.fft bekommen, aber ich weiß nicht, wie man Noten mit Frequenzen anzunähern. Ich habe ein bisschen recherchiert und festgestellt, dass ich Chroma-Features bekommen muss, die Frequenzen auf 12 Bins für Noten einer chromatischen Skala abbilden.

Ich denke, es gibt eine Chroma-Toolbox für Matlab, aber ich denke nicht, dass es etwas Ähnliches für Python gibt.

Wie soll ich damit fortfahren? Könnte jemand auch das Lesen von Material vorschlagen, das ich untersuchen sollte?

Antwort

3

können Sie Frequenzen Karte zu Noten:

n=12*log_2(f/Cp)+69

mit n wobei die MIDI-Notennummer berechnet werden, f die Frequenz und Cp der Kammerton (in der modernen Musik 440,0 Hz ist üblich).

Wie Sie vielleicht wissen, macht eine einzelne Frequenz keine musikalische Tonhöhe. "Pitch" ergibt sich aus der Empfindung der Grundwelle harmonischer Klänge, d. H. Klänge, die hauptsächlich aus ganzzahligen Vielfachen einer einzelnen Frequenz (= Grundton) bestehen.

Wenn Sie Chroma-Funktionen in Python verwenden möchten, können Sie die Bregman Audio-Visual Information Toolbox verwenden. Beachten Sie, dass die Chroma-Funktionen keine Informationen über die Oktave einer Tonhöhe liefern. Sie erhalten also nur Informationen über die pitch class.

from bregman.suite import Chromagram 
audio_file = "mono_file.wav" 
F = Chromagram(audio_file, nfft=16384, wfft=8192, nhop=2205) 
F.X # all chroma features 
F.X[:,0] # one feature 

Das allgemeine Problem der wird pitch detection genannt Tonhöheninformation von Audio-Extraktion.

+1

Vielen Dank ... Könnten Sie auch das Lesen von Material oder Büchern zur Tonhöhenerkennung oder die Anwendung von dsp auf Musik im Allgemeinen empfehlen? –

+2

Als eine allgemeine Einführung in eine breite Palette von Computer-Musik-Themen C. Roads _The Computer Music Tutorial_ (1994, Cambridge: MIT Press) ist ein sehr zugängliches und umfassendes (> 1000 Seiten) Nachschlagewerk. Für mich war der 1. Teil von M. Müllers _Information Retrieval for Music and Motion_ (2007, Berlin, Heidelberg: Springer) großartig (weniger umfassend, aktueller, technischer). Wenn Sie an einem bestimmten Thema interessiert sind, sind die [procceedings of ISMIR] (http://www.ismir.net/proceedings/) eine reiche Informationsflut. Andere können Ihnen andere (und bessere?) Referenzen geben. Ich wäre auch interessiert. –

+0

Danke .. Ich werde in sie schauen –

2

Sie können versuchen, die Literatur zur Tonhöhenerkennung zu lesen, die ziemlich umfangreich ist. Im Allgemeinen scheinen Autokorrelations-basierte Methoden ziemlich gut zu funktionieren; Frequenzdomänen- oder Nulldurchgangsverfahren sind weniger robust (FFT hilft also nicht wirklich viel). Ein guter Ausgangspunkt sein kann, eine dieser beiden Algorithmen zu implementieren:

Soweit off-the-shelf-Lösungen, Aubio überprüfen, C Code mit Python Wrapper mehr Pitch-Extraktionsalgorithmen zur Verfügung, einschließlich YIN und Multiple-Kamm.

+1

Vielen Dank :) Über aubio, finde ich Implementierungsbeispiele auf dieser Seite http://aubio.org/doc/latest/examples.html ein bisschen schwierig. Ich kann die Methoden nicht finden, die sie in ihren Beispielen in der Bibliothek verwendet haben, und es gibt nicht genug Dokumentation. –

2

Wenn Sie bereit sind, 3rd-Party-Bibliotheken zu verwenden (zumindest als Referenz für die, wie andere Menschen dies erreicht):

Musikinformationen aus Ton extrahiert, eine Präsentation von PyCon 2012 zeigt, wie die AudioNest verwenden Python API:

ist die relevante EchoNest doc mentation:

Relevant Auszug:

Tonhöheninhalt von einem „Chroma“ Vektor gegeben ist, C zu den 12 Tonhöhenklassen entspricht , C#, D bis B, mit Werten im Bereich von 0 bis 1, die beschreiben Die relative Dominanz jeder Tonhöhe in der chromatischen Tonleiter. Zum Beispiel würde ein C-Dur-Akkord wahrscheinlich durch große Werte von C, E und G repräsentiert (d. H. Klassen 0, 4 und 7). Vektoren sind auf 1 normiert durch ihre stärkste Dimension, daher laute Töne durch Werte wahrscheinlich dargestellt werden, der auf 1 alle in der Nähe sind, während reine Töne von einem Wert unter 1 (die Steigung) und andere in der Nähe von 0.

beschrieben werden

EchoNest führt die Analyse auf ihren Servern aus. Sie bieten kostenlose API-Schlüssel für nicht-kommerzielle Nutzung.

Wenn EchoNest keine Option ist, würde ich die Open-Source aubio project betrachten. Es hat Python-Bindungen, und Sie können die Quelle untersuchen, um zu sehen, wie they accomplished pitch detection.

+0

Danke. Interessantes Video :) –