Klangmuster automatisiert finden

  • Hallo zusammen,


    kennt von Euch jemand eine Moeglichkeit, in einer Audioaufzeichnung automatisiert nach einem bestimmten Klangmuster zu suchen? Also so etwas wie den Silence Finder mit dem Unterschied, dass nicht nach Ruhe, sondern einem vorgegebenen Klangmuster gesucht wird.


    Zum Verstaendnis vielleicht der Einsatzzweck: Ich suche nach einer Moeglichkeit, in einem Radiomitschnitt die Nachrichten zu extrahieren. Sie beginnen immer mit einem dreifachen Piepton und enden auf eine Erkennungsmelodie. Ich habe mir mal den Code des Silence Finders angeschaut und koennte mir vorstellen, dass man ihn zu diesem Zweck abaendern koennte. Den Piepton zu Beginn koennte man evtl. durch eine Suche nach einer Sequenz finden, die einen Pegel besitzt, der eine eng gesetzte Schranke nicht durchbricht und die Erkennungsmelodie zum Schluss ist eingefasst in zwei aufeinander folgende Stillephasen, nach denen man Suchen koennte.


    Wenn es in dieser Richtung bereits ein Projekt gibt, waere es natuerlich um so schoener ;)


    Vielen Dank und viele Gruesse,
    Frank

  • Beim Durchsuchen von Audiodaten nach vorgegebenen Mustern handelt es sich um sog. "Mustererkennung" (pattern recognition) bzw. "Musterklassifizierung" (pattern classification). Das ist z.Z. (und schon seit längerem) ein aktives Gebiet der Forschung. Hier mischen nicht nur Universitäten mit, sondern natürlich auch die großen Suchmaschinen (Google, Yahoo usw.). Das Problem dabei ist, dass ich in Audio-Daten nicht Bit-für-Bit nach einem Muster suchen kann, d.h. der Zeitverlauf der Kurve, wie er sich z.B. in Audacity darstellt, sagt nicht viel darüber aus, wie denn das, was man da sieht, denn klingt. Man muss deshalb die Audiodaten per Fourier-Transformation in ihr Frequenzspektrum zerlegen. Das Frequenzspektrum kann man dann mit den Frequenzspektren der Muster (z. B. dem Piepton) vergleichen, die man bereits vorliegen hat.


    Natürlich muss man dafür programmieren können. Aufgrund der Neuheit des Themas ist mir keine "handelsübliche" Lösung bekannt.

  • Die drei Piepser könnten sich eventuell durch modifizieren des des Silencefinder Codes finden lassen, mit der Melodie sehe ich da aber schwarz. Es gibt zwar FFT Funktionen in Nyquist, mit denen sich so etwas (pattern matching - Mustervergleich) theoretisch machen liesse, die sind aber ziemlich langsam. Bei langen Aufnahmen dauert das mit Nyquist wahrscheinlich länger, als wenn Du die Piepser selbst in der Tonspur suchst.


    Ich selber habe ein ähnliches Problem. Ich habe sehr lange Mikrofonaufnahmen, meist aufgenommen mit mit tragbaren Mikrofonen, und meist sind irgendwo mittendrin Störgeräusche, weil das Mikrofon halt während der Aufnahme irgendwo drangestossen ist. Ich hatte zu diesem Zweck auch den Silencefinder mehrfach auseinandergenommen, weiss aber aus Diskussionen auf der Nyquist Mailing Liste, dass bereits das Suchen von Pausen an den Grenzen der Möglichkeiten von Nyquist in Audacity liegt, nicht weil es so kompliziert ist, sondern weil Nyquist in Audacity grundsätzlich alle Zwischenergebnisse in den Speicher des Rechners schreibt, der bei langen Tonspuren (und dementsprechend vielen Analysedaten) dann auch gerne mal überläuft.


    In Nyquist (ohne Audacity) gibt es zwar die Möglichkeit, Zwischenergebnisse wieder zurück auf die Festplatte zu schreiben (also echte two-pass Plugins: erst die gesamte Tonspur untersuchen und dann in einem zweiten Durchgang anhand der auf der Festplatte zwischengespeicherten Analysedaten die Nachrichten rausschneiden), ich sehe aber auch hier das Hauptproblem in der Geschwindigkeit der Nyquist FFT Funktionen.


    Meine Taktik geht mittlerweile so, dass ich die Aufnahmen in voller Länge (Aufnahmedauer länger als eine Stunde) in Audacity reinlade und erstmal die Tonspur nach auffälligen optischen Mustern durchsuche. Das geht meiner Erfahrung nach am schnellsten.


    Mehr zu Nyquist (Silencefinder) siehe http://www.audacity-forum.de/thread/741


    Das beste Freeware Tool (kost nix) zum Thema 'Audio Pattern Recognition', das ich kenne, ist 'Praat': http://www.fon.hum.uva.nl/praat/. Da geht es zwar vorwiegend um Spracherkennung, alle Analysefunktionen von Praat können aber grundsätzlich den kompletten Audiobereich bis 20kHz untersuchen. Piepstöne und Melodien müssten sich damit finden lassen, Funktionen zum Bearbeiten von Tondateien (Nachrichten rausschneiden) gibt's auch, ist aber alles in allem wahrscheinlich mit mehreren Wochen Arbeit verbunden (und hat mit Audacity dann natürlich auch nicht mehr viel zu tun). Praat ist aber (wie Audacity) GPL Code, vielleicht liessen sich am Ende Teile von Praat mit Audacity kombinieren (sofern sich jemand findet, der das machen will).


    Zusammenfassung: Ich bin an diesem Thema grundsätzlich interessiert, sehe aber keine Möglichkeit einer 'schnellen' Lösung.

  • ooooh,


    toll das hier jemand schon das Thema angeschnitten hat, welches mich ebenfalls sehr stark interessiert. Habe ein ähnliches Problem. Meine Aufnahmen dauern mehrere Stunden und auf der Festplatte liegen so ca. 80 Lieder die ich schon in mühevoller Handarbeit aus anderen Aufnahmen herausgeschnitten habe. Wenn ich mal wieder eine Radioaufnahme mache, kann es sein, dass unter der 8h Aufnahme leider nur 1-2 Songs sind die mich interessieren und andere die ich nicht haben möchte oder es sind die gleichen die ich schon auf der Platte habe. Jetzt kann mir natürlich die Idee, dass ganze irgendwie zu automatisieren, hatte mir aber schon gedacht, dass das so einfach nicht sein wird. Vor allem gehe von einem recht rechenintensivem Problem aus? Habe ich da recht?


    Meine Vorgehensweise wäre gewesen, Lied A durchh FFT in den Frequenzraum zu transformieren und entsprechend in der 8h Aufnahme nach diesem Frequenzmuster zu suchen - klar die zeitliche Information darf dabei nicht verlorengehen. Wäre diese Vorgehensweise überhaupt realistisch/möglich?


    Danke,


    Gruß


    pajofego

  • Rechenintensiv auf jeden Fall, aber meine Devise ist: wenn der Rechner zehn Stunden zum Rechnen braucht, dann kann ich ja so lange zehn Stunden was anderes machen, das geht immer noch schneller, als wenn ich alles per Hand suchen muss.


    Die Probleme in der Praxis sehen so aus:


    Nyquist in Audacity braucht für die FFT-Analyse einer 8 Stunden Datei (44.1kHz 16bit Stereo) laut meinem Taschenrechner ca. 4.845 GigaByte RAM plus den Speicher, den die FFT-Analyse des Liedes braucht, plus den Speicher, den das jeweilige Betriebssystem und Audacity selbst zum Arbeiten brauchen. Mit einem Rechner unter mindestens 5 bis 6 GigaByte RAM ist das also leider vergessbar (unrealistisch).


    In Nyquist (ohne Audacity) müsste der Mustervergleich in XLISP geschrieben werden, und das ist entsetzlich lahm. Die XLISP Fernsteuerungs Funktionen für externe Programme arbeiten nur unter Unix-ähnlichen Betriebssystemen (also nicht unter Windows). Unter Mac OS X oder Linux liesse sich der Mustervergleich als externes Common Lisp oder C Programm auslagern, was erheblich schneller wäre, aber natürlich auch erst geschrieben werden muss.


    'Praat' lädt lange Dateien immer nur 'blockweise' in den Speicher, um sie zu vergleichen. Es müsste also mal im Praat Manual nachgelesen werden, wie gross so ein Block ist, um herauszufinden, ob da ein ganzes Lied hineinpasst (weiss ich leider gerade nicht auswendig). Das 'Praat' Manual gibt's hier: http://www.fon.hum.uva.nl/praat/

  • edgar-rft


    Danke für deine Ausführungen. Mir schwebt da eigentlich auch eine Art Eigenlösung vor. Ich suche schon länger einmal wieder eine Programmieraufgabe und zwar eine die weg geht von typischen Strömungsberechnungs- hin zu einer anderen rechenintensive Aufgabe. Ich hatte mal im Rahmen meiner Diplomarbeit ein numerisches Problem auf der GPU umgesetzt. Hat richtig viel Spaß gemacht und war dementsprechend auch sauschnell. Heute hat sich einige auf dem GPGPU Feld getan. Bin mal auf CUDA von nVidia gespannt...naja. Kurzum, ich frage mich ob dies eine interessante Aufgabe für die GPU sein könnte. Das ist jetzt aber kein festes Projekt, was ich vor hätte, ich denke laut darüber nach. Würde eingentlich für so eine Aufgabe 32Bit Gleitkommagenauigkeit ausreichen? Was haltet ihr an sich von dieser Idee? Gab's dahingehen schon andere ähnliche Diskussionen?


    Danke,


    Gruß


    pajofego