Faust (Functional AUdio STream) ist eine Programmiersprache, die speziell für die Erstellung von digitalen Synthesizern und Audio Effekten gedacht ist. Faust unterstützt das funktionale Programmierparadigma und man kann den geschriebenen DSP-Code schnell in eine andere allgemeine Programmiersprache, wie C, C++, Java, JavaScript oder Web Assembly, übersetzen.
Außerdem ist es möglich diesen generierten Code leicht in verschiedene Objekte zu kompilieren: Audio-Plugins, Standalone-Anwendungen, Smartphone- oder Web Apps.
Faust Programme werden kompiliert und nicht interpretiert. Sie werden in möglichst optimierten C++ Code umgewandelt. Angeblich soll dieser generierte Code effizienter sein, als der den ein fortgeschrittener C++ Entwickler schreiben würde … zumindest genauso effizient. Hut ab!
Faust ist zwar im Grunde eine textuelle Sprache, aber trotzdem ähnelt das alles einem Block Diagramm. Sie vereint die funktionelle Programmierung mit dem Erstellen von Blockdiagrammen. Man programmiert quasi Blockdiagramme mithilfe von Funktionen. Kurz gesagt: Ein Faust Programm beschreibt einen Signalprozessor.
Die meisten Audiotools können als Signalprozessoren dargestellt werden. Sie verfügen über Audio-Ein– und –Ausgänge und Kontrollsignale werden mithilfe von Drehreglern, Schiebern und diversen Anzeigen dargestellt.
Faust benutzen…
Zunächst war Faust nur als Kommandozeilen-Tool vorgesehen und man kann Faust natürlich noch genauso benutzen.
Hier kann man seine mit viel Fleiß erstellten Programme in C++ Code umwandeln und in allerlei anderen C++ Voodoo Krams einbauen (JUCE … z.B.). Es gibt aber auch etliche Tools, die den Code direkt in nützliche Anwendungen oder Plugins umwandeln.
Allerdings benötigt man hierzu natürlich jeweils die zugehörige API. Aber, wenn man nicht gerade ein Terminal Ninja ist oder vielleicht erstmal ein wenig in den Faust Kosmos hineinschnuppern möchte, gibt es mittlerweile zahlreiche und richtig coole Web-Tools.
Web-IDE
Zum Einen gibt es die Faust Web-IDE. Eine Programmierumgebung im Browser – ähnlich der von SOUL – die sich wirklich hervorragend eignet, um Code schnell zu schreiben und zu testen.
Ich kann hier meinen Code schreiben, lokalen DSP Code importieren, das zugehörige Blockdiagramm erzeugen lassen, den Code testen (Audio-In– und Output, sowie Midi Input sind vorhanden), Audio aufnehmen und lokal speichern. Außerdem wird mir hier auch das zugehörige, generierte GUI angezeigt.
Ganz wichtig: Hier kann ich mir Code für alle möglichen Architekturen und Anwendungen erzeugen lassen. Und hier muss ich keine APIs lokal installiert haben, denn alles wird auf dem Server kompiliert. Soll heißen, ich kann mir hier direkt aus dem Faust Code ein VST-Plugin generieren.
Dazu wähle ich im linken Menü den Truck aus und wähle dort mein Zielsystem und meine Anwendungsart … danach klicke ich auf Export und kompiliere mir beispielsweise ein Instrument aus dem obigen Noise-Generator Beispiel. Wenn ich nun auf Download klicke, wird ein ZIP File auf meinem Rechner gespeichert, welches die DLL Datei enthält. Wenn ich diese in meiner DAW öffne…
… habe ich einen Noise-Generator in meiner DAW, den ich mit meinem Midi-Controller spielen kann. Ich muss mich hier zwar zunächst mit der Standard-GUI der DAW zufrieden geben, aber viel einfacher kann man ein VST-Plugin wohl nicht erstellen.
Und ich bin natürlich nicht auf die Erzeugung eines VST-Plugins beschränkt. Ich kann alles Mögliche erzeugen: Android oder iOS Anwendungen, Linux Plugins, Pure Data Krams, MAX MSP Zeugs, reinen Source Code in allen möglichen Sprachen und anderen esoterischen Schnick-Schnack … ich bin begeistert.
Faust Editor
Des Weiteren gibt es noch einen Online Editor, den man ebenfalls mit Code füttern kann und der dazu das Blockdiagramm erzeugt.
Auch hier besteht die Möglichkeit Code zu importieren und lokal zu sichern. Und auch hier kann ich wieder alles Mögliche exportieren. Wenn ich meinen Code ausführe öffnet sich in einem riesigen Popup das zugehörige GUI und der Signalprozessor kann getestet werden.
Faust Playground
Der mit Abstand coolste Scheiß ist aber sicherlich der Faust Playground. Eine grafische Web-App zum Schreiben und Testen von Faust Code.
Anhand der Library kann ich mir verschiedene Prozessoren aus den Beispielen auf den Spielplatz laden – oder auch eigenen Code importieren. Hier habe ich nun die Möglichkeit auf der grafischen Oberfläche verschiedene Prozessoren miteinander zu verbinden und mir somit einen Patch zusammenzustellen, ähnlich wie bei Max oder PD.
Wenn ich dieses Patch nun als VST exportiere, wird aus dem Ganzen in Instrument oder Audio-Effekt gemacht. Irgendwie nice … Aber der Playground ist nicht die beste Umgebung zum Schreiben von Faust Code.
Natürlich kann man seinen Code auch im lokalen Editor seiner Wahl schreiben. Es gibt für alle gängigen Modelle ein Plugin, dass die Syntax highlighted.
Faust Live
Zusätzlich zu den ganzen Online Tools gibt es aber noch eine QT-Anwendung für Windows, MacOS und Linux: Faust Live. Diese konnte ich momentan nicht wirklich testen, weil ich sie unter Linux noch nicht komplett installiert habe und unter Windows Probleme mit dem Sound hatte (ja, Windows …). Ich werde mir die Anwendung aber nochmal unter MacOS ansehen … bei Gelegenheit.
Fazit
Auch wenn ich hier noch nicht wirklich auf den Code eingegangen bin und ich mir nur recht oberflächlich einige Beispiele angesehen habe, bin ich mal wieder begeistert … wie immer, wenn ich eine neue Audio Programmiersprache kennenlerne.
Faust ist gut dokumentiert, bietet richtig gute Tools – online, wie lokal – und generiert wirklich brauchbaren Code. Ich will da demnächst auf jeden Fall noch mehr ausprobieren.
Klasse finde ich auch, dass so viele verschiedene Systeme angesprochen werden. Ich kann den Code wirklich für alle möglichen Anwendungen einsetzen. Auch der Export für JUCE-Projekte ist interessant. Angeblich soll Faust DSP-Code ja einfacher zu schreiben sein, als nativer C++-Code. Da werde ich mir in den kommenden Wochen mal ein Bild von machen und vielleicht starte ich mal wieder eine kleine Tutorials-Reihe…
Bis dahin empfehle ich einfach mal folgende Links:
- Faust Website
- Faust Online Editor
- Faust Online IDE
- Faust Patching Playground
- Faust Workshop 2015 mit umfangreichen Tutorialvideos
Faust Einführung von Oli Larkin:
setz
Thanks for the review!
BTW the Faust Web-IDE was actually developed and published a bit before the SOUL one, and so both of them share similar concepts !
sletz
Thanks for the review!
BTW the Faust Web-IDE was actually developed and published a bit before the SOUL one, and so both of them share similar concepts !
Bernd W.
You’re welcome. Yes, i know that Faust is older than SOUL.