Wenn man sich jahrelang mit Musiksoftware beschäftigt, nebenbei ein Informatikstudium am Laufen hat und dann auch noch etwas mit C++ in VCVRack herumgespielt hat, kommt man irgendwann schon auf den Gedanken, selber ein Effekt- oder Instrument zu programmieren.

Die Sprache der Wahl ist definitiv C++. Eigentlich habe ich mich die letzten zwei Jahre recht intensiv mit Java beschäftigt. Allerdings ist Performance einer der wichtigsten Faktoren, wenn wir von Realtime-Audio-Anwendungen sprechen. C bzw. C++ ist in diesem Bereich unschlagbar. Wenn man schon etwas Erfahrung in objektorientierter Programmierung mitbringt, fällt der Einstieg in C++ auch etwas leichter.

Für Realtime Audio-Anwendungen ist C++ die Sprache der Wahl

Aber wo fängt man an? Ein VST-Plugin schreibt man nunmal nicht einfach so herunter. Man muss sich mit komplexen DSP Algorithmen auseinander setzen, Fourier Transformationen verstehen und schnellen optimierten C++ Code schreiben. Das ist die Kernarbeit eines Entwicklers von Audio Anwendungen.

Allerdings gibt es noch ein oder zwei Kleinigkeiten die vorher noch erledigt werden müssen. Wie bekomme ich Audio in meine Anwendung und wie bekomme ich den eventuell verbogenen Klang wieder heraus? D.h. ich muss mich außerdem mit CoreAudio und / oder Asio, DirectSound und WASAPI anfreunden. Und diese Schnittstellen alleine sind nur für Mac oder Windows. Zusätzlich kommt dann noch Linux oder unter Umständen iOs und Android dazu.

Als nächstes kommen dann die Schnittstellen für die unterschiedlichsten Plugin-Formate: VST, VST3, AAX und AU. Nicht zu vergessen das User Interface. Allein diese grundlegenden Anforderungen können einem Kopfschmerzen bereiten. Und wenn man das alles mal aus der Vogelperspektive betrachtet, macht die eigentliche Audio-Anwendung einen relativ kleinen Teil des Ganzen aus.

JUCE hilft bei vielen GUI- und Audio-Apps weiter…

Die Lösung für all diese „sekundären“ Probleme ist ein Framework. Mittlerweile gibt es einige C++Frameworks zum Bauen von Audio-Plugins. Aber ich beschäftige mich seit Kurzem mit JUCE (Jules‘ Utility Class Extensions). JUCE ist ein Cross Platform C++ Application Framework, dass sich unter anderem auf Audio- und GUI-Anwendungen spezialisiert hat. Der Jules, der dem Framework den Anfangsbuchstaben leiht, ist natürlich Julian Storer. JUCE ist bei der Entwicklung der DAW Tracktion entstanden. Herr Storer hat mal eben so die Audio- und GUI-Elemente von Tracktion abstrahiert und 2004 als eigenständiges Framework veröffentlicht.

Mittlerweile ist JUCE in der Version 5.2. JUCE ist frei nutzbar. Es gibt eine Personal- und eine Edu-Lizenz. Für diese Lizenzen muss man nichts bezahlen. Allerdings wird beim Start des Plugins oder der Anwendung ganz kurz „Made with JUCE“ eingeblendet und die Anwendung muss unter der GNU License veröffentlicht werden, also als Open Source Produkt. Man darf sogar Geld damit verdienen, aber nicht mehr als 50k $ im Jahr. Ansonsten gibt es eine Indie-Lizenz und auch eine Enterprise Lizenz, die dann aber Geld kosten. Wenn man überlegt, wieviel Arbeit in JUCE steckt und wieviel Arbeit man selber damit einspart, ist das alles mehr als fair.

Vorteile von JUCE auf einem Blick

  • Sehr effizient durch qualitativ großartigem Code
  • Cross-Plattform kompatibel
  • Cross-Plugin kompatibel (VST, AU, AAX, …)
  • zunächst kostenlos
  • gut dokumentiert / gute Community

Ich will mich in den nächsten Wochen und Monaten mit JUCE vertraut machen, meine Kenntnisse in C++ ausweiten und in die Entwicklung von VST-Plugins einsteigen. Um das Erlernte zu festigen will ich an dieser Stelle in unregelmäßigen Abständen Artikel und auch Tutorials zu diesem Thema schreiben. Es wird also eine kleine Reihe zu JUCE und VST-Entwicklung geben. Im nächsten Beitrag werde ich zunächst einmal das Framework herunterladen, den Projucer von JUCE vorstellen und ein erstes, zunächst leeres Plugin erstellen…