Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss16:musik-erkennung

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ss16:musik-erkennung [2016/09/29 19:31]
zoppl [Audio-Fingerprinting]
ss16:musik-erkennung [2016/09/30 11:32] (aktuell)
zoppl [Verlauf]
Zeile 131: Zeile 131:
 ==== Datenverarbeitung mittels Short-Time Fourier Transform ==== ==== Datenverarbeitung mittels Short-Time Fourier Transform ====
  
-Die Short-Time Fourier Transformation ist eine Art der Fourier Transformation,​ um die zeitliche Änderung des Frequenzspektrums eines zum Beispiel Audiosignals darzustellen. Das eingelesene Audiosignal wird hier in einen Datensatz umgewandelt,​ welcher später als Spektrogramm geplottet werden kann.+Die Short-Time Fourier Transformation ist eine Art der Fourier Transformation,​ um die zeitliche Änderung des Frequenzspektrums eines zum Beispiel Audiosignals darzustellen. Das eingelesene Audiosignal wird hier in einen Datensatz umgewandelt,​ welcher später als Spektrogramm geplottet werden kann. Durch ermitteln der Frequenzen können einzelne Instrumente und charakteristische Punkte im Lied gefunden werden. Dies wird im Abschnitt fingerprinting weiter erläutert
 <code python> <code python>
 """​ Short-Time Fourier Transformation """​ """​ Short-Time Fourier Transformation """​
Zeile 168: Zeile 168:
  
 Spektrogramme dienen dem Zweck ein Frequenzspektrum bildlich darzustellen. Bei der Arbeit mit Audiosignalen kann an einem Spektrogramm die jeweilige Intensität der verschiedenen Frequenzen abgelesen werden. ​ Spektrogramme dienen dem Zweck ein Frequenzspektrum bildlich darzustellen. Bei der Arbeit mit Audiosignalen kann an einem Spektrogramm die jeweilige Intensität der verschiedenen Frequenzen abgelesen werden. ​
 +
 +(ein Spektrogramm ist im Abschnitt Audio-fingerprinting zu sehen)
 +
  
 <code python> <code python>
Zeile 243: Zeile 246:
 ==== Eine Datenbank erstellen (lite) ==== ==== Eine Datenbank erstellen (lite) ====
  
-Unser erster Gedanke war es eine kleine Datenbank zu erstellen, welche Informationen zu Song, Album, Künstler, Genre und vor allem den Fingerprint Hash beinhaltet. Diese sollte auf Basis von SQL Lite entstehen. Da wir uns zum Ende des Semesters eingestehen mussten, dass eine Datenbank von mehreren 100 Songs eher unnötig ist, vor allem andere Teile des Programms bedürfen zuerst einer Optimierung,​ werden die aktuell eingelesenen Titelnamen der Fingerprints mittels Pickle in einer Textdatei gespeichert. Die einzelnen Fingerprints jedes einzelnen Songs befinden sich in einer jeweils eigenen Textdatei. Diese können dann später beim Vergleichen von Audiosignalen nacheinander aufgerufen werden.+Unser erster Gedanke war es eine kleine Datenbank zu erstellen, welche Informationen zu Song, Album, Künstler, Genre und vor allem den Fingerprint Hash beinhaltet. Diese sollte auf Basis von SQL Lite entstehen. Da wir uns zum Ende des Semesters eingestehen mussten, dass eine Datenbank von mehreren 100 Songs eher unnötig ist, vor allem andere Teile des Programms bedürfen zuerst einer Optimierung,​ werden die aktuell eingelesenen Titelnamen der Fingerprints mittels Pickle in einer Textdatei gespeichert. Pickle ist eine Funktion, die Dateien mit verschiedenem Inhalt (Zahlen, Buchstaben, Vektoren, ...) deutlich komprimiert speichern kann, und diese auch leicht wieder aufrufen kann. Die einzelnen Fingerprints jedes einzelnen Songs befinden sich in einer jeweils eigenen Textdatei. Diese können dann später beim Vergleichen von Audiosignalen nacheinander aufgerufen werden.
 Momentan besteht unsere Datenbank.txt Datei nur aus den Songs des Albums "​AM"​ von den Arctic Monkeys: Momentan besteht unsere Datenbank.txt Datei nur aus den Songs des Albums "​AM"​ von den Arctic Monkeys:
  
Zeile 261: Zeile 264:
 </​code>​ </​code>​
  
-Ein Fingerprint eines einzelnen Songs sieht in etwa so aus (nur die ersten paar Zeilen, da die komplette Datei den Rahmen dieses Wikis sprengen würde, etwa 6MB an Text):+Ein Fingerprint eines einzelnen Songs ist eine Aneinanderreihung von Zahlenpaaren,​ die die Hash-Zahl und die Zeit enthalten (Hash-Zahl, Zeit), (Hash-Zahl, Zeit),... Nach dem Durchlaufen von Pickle ​sieht das in etwa so aus (nur die ersten paar Zeilen, da die komplette Datei den Rahmen dieses Wikis sprengen würde, etwa 6MB an Text):
  
 <​code>​ <​code>​
Zeile 315: Zeile 318:
 </​code>​ </​code>​
  
 +
 +==== Verlauf ====
 +
 +In den ersten Wochen wurde die grobe Syntax zum Projekt erarbeitet und sich in die Materie eingelesen. Dazu hatten wir unter Anderem einen Auszug aus dem Patent von Shazam. Auch hat uns eine Internetseite (der Fingerprint-Link in den Quellen) geholfen, das Prinzip grundlegend zu verstehen. Danach wurden die Arbeitsschritte definiert und weitgehend nacheinander abgearbeitet. Das lief einigermaßen flüssig. Größere Probleme traten bei der Fourier-Transformation auf, da dieses mathematische Verfahren sehr zeitraubend ist und daher nach einigen Optimierungen gesucht werden musste. Gegen Ende hat sich daher ein Teil der Gruppe mehr mit dem Fingerprinting,​ der andere Teil mehr mit dem Erstellen der Datenbank beschäftigt. Diese parallele Arbeit hat etwas Zeit gespart, die bei der STFT verloren ging. Als letzter Schritt wurde der Vergleich in der letzten Woche und bis in die Vorlesungsfreie Zeit programmiert.
 +
 +Eine genauere Beschreibung der Arbeitsschritte ist im Logbuch enthalten
 ==== Logbuch ==== ==== Logbuch ====
  
ss16/musik-erkennung.1475170266.txt.gz · Zuletzt geändert: 2016/09/29 19:31 von zoppl