- LV2-Plugin

Suche


LV2-Plugin "lv2_guitar"

Im Rahmen meiner Studienarbeit am LMS habe ich mich mit dem LV2 Audio Plugin Standard beschäftigt und ein einfaches Plugin entwickelt, das die Schwingungen einer Gitarrensaite mit der Funktionaltransformationsmethode physikalisch simuliert. Das Plugin ist über MIDI spielbar. Es basiert teilweise auf dem VST-Plugin "FTM String" von Daniel Maaß, auf dem VST-Plugin "FTM Psycho String" von Alexander Müller und auf dem LV2-Plugin "Simple Sine Generator" von Nedko Arnaudov.

Grundlagen der physikalischen Simulation

Schwingende Objekte wie beispielsweise Gitarrenseiten weisen ein komplexes Schwingungsmuster auf, das von einer Vielzahl von Faktoren bestimmt wird, wie beispielsweise von der Geometrie des Objektes, dem Material mit seinen zahlreichen Materialkonstanten, der Spannung, unter der das Objekt steht und von weiteren Faktoren. Durch die Annahme gewisser Vereinfachungen und die Vernachlässigung untergeordneter Faktoren ist es möglich, die Schwingung des Objektes in vereinfachter, aber dennoch hinreichend genauer Form durch eine partielle Differentialgleichung (PDG) zu beschreiben. Die Lösung einer solchen PDG führt auf eine mathematische Beschreibung der Schwingung des Objektes; da diese PDGs jedoch in der Regel sehr komplex sind, können sie für gewöhnlich nicht auf analytischem Wege gelöst werden. Daher wird eine diskrete numerische Lösung angestrebt.

Die Funktionaltransformationsmethode (FTM)

Die Funktionaltransformationsmethode wurde am Lehrstuhl für Multimediakommunikation und Signalverarbeitung als Methode zur physikalischen Simulation realer schwingender Systeme wie beispielsweise Gitarrensaiten oder auch Membranen. Die Schwingung einer Gitarrensaite wird wie bereits erwähnt durch eine PDG beschrieben, die die verschiedenen physikalischen Paramter der Saite beinhaltet. Durch eine Serie von Integraltransformationen (die Laplace-Transformation für die Zeitvariable und die Sturm-Liouville-Transformation für die Ortsvariable) kann die PDG in eine mehrdimensionale Übertragungsfunktion im Frequenzbereich transformiert werden. Diese wird dann mit einer geeigneten Diskretisierungsmethode (beispielsweise mit der impulsinvarianten Transformation (IIT)) diskretisiert und mit der inversen Sturm-Liouville-Transformation sowie der inversen Z-Transformation in den diskreten Zeit- und Ortsbereich zurücktransformiert. Dieses Vorgehen führt auf eine diskrete Lösung der kontinuierlichen PDG, die nun relativ leicht in gängigen Programmiersprachen wie Matlab oder C implementiert werden kann.

Der LV2 Audio Plugin Standard

Der LV2 standard wurde 2006 als Nachfolger des verbreiteten LADSPA Standards entwickelt, um die mit dem LADSPA Standard einhergehenden Einschränkungen zu umgehen und um einen flexibleren und leicht erweiterbaren Standard zu schaffen.

Dieses Ziel wird durch die Trennung von statischen Daten und ausführbarem Code des Plugins in unterschiedlichen Dateien erreicht. Die statischen Daten des Plugins, wie beispielsweise Informationen über den Autor und über die Audio- und Midi-Ports des Plugins werden in sogenannten RDF-Dateien gespeichert. Es handelt sich dabei um einfache Textdateien, die in der Turtle-Syntax formatiert sind. Die für eine funktionierende LV2-Umgebung nötigen Dateien sind im LV2 Core Package zusammengefasst, das hier heruntergeladen werden kann. Das Plugin lv2_guitar wurde für Version 2.0 des Core Package erstellt; zum Zeitpunkt der Erstellung dieser Webseite war jedoch schon Version 3.0 des Core Package verfügbar. Da die einzelnen Versionen des Core Package abwärtskompatibel sind, sollten sich hieraus aber keine Probleme ergeben. Das Core Package besteht aus einem C-Headerfile lv2.h und dem RDF Schema für LV2-Plugins lv2.ttl.

Um ein Plugin auszuführen, wird eine geeignete Hostapplikation benötigt. Es sind zahlreiche Hostapplikationen verschiedener Autoren verfügbar; das Plugin lv2_guitar wurde erfolgreich getestet mit der Hostapplikation lv2_jack_host, die der Simple C library for LV2 hosts von Dave Robillard beiliegt, und mit der Hostapplikation Elven von Lars Luthman (die jedoch nach Angaben des Autors nicht kompatibel mit Revision 3 des LV2-Standards ist).

Plugins können in C oder C++ geschrieben werden und werden als dynamische Bibliotheken kompiliert, die dann von der jeweiligen Hostapplikation geladen werden. Ein Plugin besteht in der Regel aus mehreren Dateien (mindestens aus der Binärdatei mit der Dateiendung *.so und der benötigten RDF-Datei manifest.ttl), die im selben Verzeichnis abgelegt werden. Ein solches Verzeichis wird dann als Bundle bezeichnet.

Das lv2_guitar Plugin

Das Plugin besteht aus den folgenden Dateien:

  • lv2_guitar.c
  • manifest.ttl
  • lv2_guitar.ttl
  • GNUmakefile
  • install_lv2.sh
  • remove_lv2.sh

Die Datei lv2_guitar.c beinhaltet den Quellcode des Plugins, der dann zur Binärdatei lv2_guitar.so kompiliert wird. Die RDF-Dateien manifest.ttl und lv2_guitar.ttl beinhalten die statischen Informationen des Plugins, die in diesem Fall hauptsächlich Informationen über die Ein- und Ausgabeports des Plugins sind (es wäre ohne weiteres mögliche, alle Informationen in manifest.ttl zu sammeln, es hat sich jedoch eingebürgert, pluginspezifische Informationen in einer separaten RDF-Datei zu speichern). install_lv2.sh und remove_lv2.sh sind Shellskripte, die vom Makefile benutzt werden, um das Plugin im richtigen Verzeichis zu installieren und wieder zu löschen.

Da dieses Plugin die Events extension, über die es Midi-Events empfängt, und die URI Map extension, die die Konvertierung von URIs zu Integerwerten vornimmt, nutzt, liegen die Headerdateien dieser Erweiterungen ebenfalls bei:

  • lv2_event.h
  • lv2_event_helpers.h
  • lv2_uri_map.h

Sofern alle benötigten Libraries vorhanden sind und schon andere Plugins fehlerfrei kompiliert wurden, sollte das Kompilieren von lv2_guitar ohne Probleme durch Ausführen von

  $> make 
  $> make install  

möglich sein. Das Plugin kann dann in jeder Hostapplikation geladen werden, die Event-Ports unterstützt.

Wird der Jack-Audioserver in Verbindung mit der Hostapplikation genutzt, sollte das Plugin nach dem Laden mit zwei Audioausgängen (Stereo links und rechts) und einem Midieingang in Jack auftauchen. Nun müssen nur noch die Audioausgänge mit der Soundhardware und der Midieingang mit einem (realen oder virtuellen) Midi-Keyboard verbunden sein, und das Plugin sollte funktionieren.

Download

Quellen und Links

Dank

Ich möchte mich bei den folgenden Personen bedanken:

  • Professor Rabenstein für die Betreuung der Arbeit
  • Alexander Müller für die Bereitstellung seiner Studienarbeit, die mir beim Verstehen der FTM sehr geholfen hat
  • Den LV2-Entwicklern in #lad, die mir geduldig meine vielen Fragen beantwortet haben, v.a. Nedko Arnaudov, Lars Luthman, Krzysztof Foltman und David Robillard