 Danke, dass ihr alle gekommen seid. Ich werde ein Projekt vorstellen, das nach vielen einzelnen Projekten rauskam und soll jetzt das ultimative Framework bilden. Schauen wir uns zuerst mal an, was Leute in der Do-it-yourself-Audio-Community so machen. Die bauen also analoge Schaltkreise oder modifizieren vorhandene Schaltkreise. Das nennt man dann Circuit Bending. Oder sie machen, bauen MIDI-Controller als Erweiterung ihrer Slaptops, um quasi eine weitere Möglichkeit haben, den zu kontrollieren. Und ich habe gestern einen besonders tollen MIDI-Controller gesehen hier. Und dann gibt es Leute, die Sound über 8-Bit-Micro-Controller machen. Das ist quasi ein Hybrider-Ansatz und benutzt die Software, um die Pulse zu erzeugen und daraus Sound zu erzeugen. Und dann gibt es die tatsächlich die Embedded-Signalverarbeitung für digitale Signale. Das heißt, hier werden also nicht nur Pulse benutzt, sondern echte Messungen in der Zeitdomäne, mit der man also beliebige Wellenformen erzeugen kann. Also nicht nur rechteckige Wellen. Es gibt sehr wenige digital Signalverarbeitung, die selbst gemacht wird, weil das recht aufwendig ist. Und digitale Signalverarbeitung, da geht es hauptsächlich darum. Man konvertiert also eine analoge Welle in ein digitales Signal in verschiedenen Zeitabständen. Und dann hat man Prozessor mit einer bestimmter Software, der mittels Media oder mit einem tatsächlich Regler kontrolliert werden kann. Und dann geht man wieder zurück zu analogem Ton. Und ein Computer kann das machen. Also kann es gut. Es gibt sehr viel Software, Open Source und Close Source genauso für jeden Geschmack. Es ist also ein ziemlich volles Feld. Es gibt also alle möglichen Software, die also analoge Maschinen nachbauen. Man kann also Dinge auch bauen, die mit analogen Maschinen überhaupt nicht möglich werden. Es gibt also sehr viel. Aber wenn man in ein Musikinstrumente laden geht, dann findet man natürlich immer noch eine Menge alleinstehende Hardware, weil die Leute das mögen, dass man es einfach nur einsteckt und das einfach funktioniert. Aber das ist nicht für ... Da kann man keine Arbeit machen. Es zeigt keine E-Mails an. Es macht halt nur ... Wenn man einfach nur eine Jam-Session macht mit Freunden, dann kommen keine Pop-Up Fenster. Man muss nicht die Software aktualisieren. So was machen anstatt einfach nur Musik zu machen und zu spielen. Also habe ich hier Hardware entworfen. Die sieht ja aus die analog-digital-Converter und die digitalen analog-Converter und ein Prozessor. Und was man hier sieht sind die Stereo-Eingänge, Stereo-Ausgänge, Kopfhörerausgang, USB für Computerverbindungen, ein SD-Kartenslot und MIDI Input und Output. Es ist wie in einem Instrumenten-Geschäft. Wenn man das auseinander nimmt, dann sieht man, dass das ähnlich aussieht. Viele Produkte unterscheiden sich nur durch die Anzahl der Knöpfe und die Farbe und Form von dem Plastik. Und natürlich die Firmware, die da draufläuft. Ich habe hier keine Knöpfe und keine Plastik-Häuse. Es gibt nur ein paar Buchsen auf der Vorderseite und hinten sind allgemeine Ein- und Ausgänge, wo man beliebige Sachen dran anschließen kann. Ein bisschen wie ein Arduino. Es ist nicht beschränkt auf Knöpfe und Anzeigen und man kann Beschleunigungs-Sensoren und Lichter und alles dran machen. Und das ist eben Circuit-Bending und einfach Sachen dran verändern. Und das ist nicht nur ein Nachgedanke, sondern es ist einfach Teil von diesem Design und wir müssen jetzt hier Firmware entwickeln, die die digitale Signalfahrarbeitung macht. Man braucht ein Audio, ein Ausgabetreiber, ein MIDI, ein Ausgabetreiber und man braucht Treiber für die Knöpfe und Regler und dann macht man beliebige Kombinationen von Signalprozessoren, Auszulatoren, Filter, Hülkurven und einige Parameter, um das irgendwie zu kontrollieren und etwas Haushaltsroutinen, um Presets abzuspeichern oder so. Es ist nicht das erste Mal, dass Open Source-Digital-Signalfahrarbeitungslösungen hier entwickelt wurden, aber die haben wirklich noch nicht kritische Masse erreicht. Und ich glaube, um DSP programmieren ist ziemlich komplex und man braucht einiges an Mathematik. Man muss eine Balance finden zwischen Geschwindigkeit und der Qualität, z.B. von der Standard-Sealab-Library und die ist für Mathematische Präzision und manchmal braucht man einfach mehr Geschwindigkeit stattdessen. Und es ist nicht deswegen, weil man nicht DSP-Agguritmen in den Firmenware machen könnte und dann machen wir das. Und hier gibt es, gucke ich mal, was es an Software gibt, nur Software, ohne Hardware. Und hier gibt es einige Dataflow-orientierte Programmiersprachen. Open Source ist z.B. pure Data. Und es ist ein Programm, wo man hier Objekte anwählen kann auf dem Bildschirm und die konfiguriert. Und dann verbindet man Ein- und Ausgänge und macht Beziehung zwischen Ein- und Ausgängen. Und dazwischen sitzt dann ein Programm. Und es ist eine Art Programmiersprache. Und es gibt eine kommerzielles Programm hier, das heißt Max. Und die haben ähnliche Syntax hier und Grammatik. Das Schöne an grafischer Programmierung ist, dass man keine Syntax oder Grammatikfehler machen kann, weil man einfach das Objekt auswählt und anders als wenn man ein Code eintippt. Und man kann nur einfach logische Fehler machen. Und die Strafe für ein Fehler ist viel kleiner. Man hat keinen Compiler, der einfach nur sagt, ich verstehe das nicht. Und man muss selber sich darum kümmern, dass man das alles richtig macht. Und mit dieser niedrigen Strafe ist es sehr schön für Künstler und Musiker. Und beide Sprachen fühlen sich irgendwie, als ob das Künstler entwickelt hätten. Es ist eine grafische Programmiersprache. Es ist nicht eine komplette Programmiersprache. Und man kann, glaube ich, keinen Quick Sort schreiben da drinnen, in dem man einfach irgendwas zusammenstabstellt. Das wird sehr umständlich. Und Single Processing ist einfach regelmäßige Daten. Und der eigentliche Teil des Programms, der ausgeführt wird, ist eher langweich, der ist eher linear. Und beide Umgebungen hängen also von Objekten ab, die als dynamische Bibliotheken geladen werden. Wenn die laufen, werden also Funktionen in DLLs aufgerufen. Und das führt zu großem Aufwand, wenn einfach nur ein Objekt zwei Eingänge zusammen addieren muss. Wenn also indirekte Aufrufe aufgerufen, man muss den Kontext speichern, das zusammenzählen und dann den Kontext wieder herstellen. Das kann man im Prinzip in einer Anweisung machen in optimalem Code. Also, jetzt lasst uns versuchen, dass wir Firmware bearbeiten, ganz ähnlich so leicht wie möglich machen können. Das heißt, ich hätte gerne eine grafische Oberfläche gemacht, um Firmware zu programmieren, wo man also keine Kommando-Zahlenprogramme sehen muss. Und man wird auch keinen C++ Code sehen, außer man will das sehen. Und das soll also ganz einfach sein, das zu kompalieren, hochzuladen und auszuführen. Und das war die erste Version von der Architektur. Also auf dem Computer wird ein Programm ausgeführt, der Axolotti Patcher. Der hat eine Bibliothek von Objekten, die man auf dem Bildschirm platzieren kann und zusammenbauen und die Software generiert daraus Code und der wird kompaliert und hochgeladen. Und dann ist das hier der Axolotti Core, das ist das Board, das Stück Hardware. Könnte jemand bitte die Kamera hier rüber bringen? Also nachdem man das hoch lädt, da hat man dann die Firmware, mit der man Sound-Ein- und Ausgabe oder MIDI-Ein- und Ausgabe und man macht das einfach an und man kann direkt spielen. Ich werde eine kurze Demo davon machen. Das ist also der Patcher-Umgebung. Das heißt, das ist ein leeres Dokument und wenn ich hier doppelt draufklicke, dann kriege ich die Objektbibliothek und es gibt einen linearen Katalog, einen alphabetischen Katalog von Objekten und es gibt einen hierarchischen kategorischen, also nach Kategorien sortierten, mit dem man leichter suchen kann und man kann auch einfach anfangen zu tippen. Um den besten Treffer zu finden, also ich fange mal an mit Sound 2.12. Ich fange hier an mit einem sehr gezahnen Oscillator und macht einfach nur eine Rampe, die immer wieder ansteigt und dann wieder auf Null abfällt. Ich habe die Elemente von diesem Objekt und es hat links einen Eingang und das Blau ist ein Datentyp und das bedeutet, es bekommt eine Spannung als Eingang für langsame Veränderungen und es nicht für Audio geeignet, aber gut genug für langsame Änderungen über die Zeit und hier ist ein roter Datentyp, das ist ein Ausgang auf der rechten Seite. Auf beiden steht plus minus, das heißt diesen Bipolar und da ist ein Regler, wo man die Frequenz einstellen kann. Ich habe versucht es so einfach zu machen wie möglich, das heißt in der Nullposition gibt es einen gewissen Wert in Herz und Musiker können da auch den Namen der Note direkt ablesen mit einem Klick und man kriegt auch den Faktor im Verhältnis zu dem Mittelwert, das heißt wenn ich jetzt hier den Regler auf 12 setze, dann ist die Rate 2, also die doppelte Frequenz und wenn ich jetzt mit 7 eintrage, dann entspricht das ungefähr 1,5, also es zeigt also fast wie Harmonien funktionieren in der Musik. Das heißt um an dem Oscillator also tatsächlich zuzuhören, muss ich hier eine, also ich füge da jetzt erstmal eine Lautstärkekontrolle hinzu, nur damit mir sicher gehen können, dass das Soundsystem nicht beschädigt wird und ich habe jetzt also hier so ein blaues Objekt erzeugt, blauer Eingang, blauer Ausgang, also ganz ähnlich wie man Funktionen überladen in C++ machen kann, wird dieses Objekt jetzt rot, also man gibt dem jetzt einen roten Eingang und dann siehte es a, das ist also ein roter Eingang und jetzt ist es also alles rot und dann kann ich das verbinden mit einem Ausgang, Stereo Ausgang und drehe das nach oben und in der ersten Version drückt man also hier so ein Knopf und das generiert jetzt C++ Code und wird dann direkt hochgeladen und wenn alles funktioniert, dann kann man jetzt bitte die Lautstärke ein bisschen hochdrehen, ich habe hier was ausgesteckt, könnt ihr die Lautstärke noch mal runterdrehen bitte und hier kann man jetzt hören, also man hat jetzt hier schon einen funktionierenden System ich spring jetzt hier hin und her in meiner Präsentation, denn Version 1 war einfach nur ich erzeuger also hier so ein Programm und das wird ausgeführt und in Version 2 ging es dann drum die Änderungen einfach zu machen, also nachdem C++ Code erzeugt, kombaliert und hochgeladen wird, soll es jetzt also auch möglich sein, dass man hier Parameter direkt ändert, das heißt man muss also nicht das Programm nochmal neu kompilieren und nochmal hochladen, nur einfach weil man einen Wert ändert und es geht auch andersrum, das heißt hier gibt es zwei Anzeigen, die vor dem Code aus geändert werden können und den aktuellen Lautstärke-Level anzeigen, hier wird also auf dem Laptop keine Berechnung für die Audiodaten gemacht, das macht die Firmware, die kompiliert und hochgeladen wird und die redet mit dem Benutzer-Interface nachdem es läuft, das heißt wenn wir jetzt hier so einen kleinen Oscillator und ich kann jetzt da ganz einfach ein Keyboard draus bauen, wenn ich ein Keyboardobjekt nehme, dieses Keyboardobjekt hat einen Ausgang für die Note, die erzeugt wird und das hat einen Ausgang, der anzeigt, ob eine Taste gedrückt wird oder nicht, also es ist ganz ähnlich zu einem alten Analog-Synthesizer, man hat also Maschinen, die in gewisser Weise ähnlich sind zu dem hier, nur dass jedes Objekt in einem eigenen Schaltkreis ist, den man mit Patch-Cable verbindet und um das jetzt zu einem Spielbahnen-Ding zu machen, muss ich da jetzt noch was modifizieren. Das gelbe Cable-Typ ist ein Buhl-Typ, also an oder aus und ich kann das auch umwandeln in so eine blaue, also ein Objekt, das so einen gelben Eingang hat, kann auch blau sein und es gibt eine Umwandlungsregel von gelb nach blau, das heißt ich mache das jetzt mal an und dann nehme ich mit das virtuelle Keyboard und die Lautstärke ist noch auf null und das heißt man hat jetzt ein spielbares System. Ich denke, so fünf Objekte ist ein absolutes Minimum, um ein System zu kriegen, auf dem man tatsächlich auch spielen kann, aber es kann auch ziemlich wachsen, ziemlich groß werden und ich gehe jetzt mal in hier einen kleinen Orgel. Das ist so eine Art. Als eines der Probleme, wenn man Musik spielen will, dann will man normalerweise nicht nur eine Taste gleichzeitig spielen wollen können. Für manche Instrumente macht das Sinn, aber für andere Instrumente nicht. Also wenn man das in einem Diagramm hier zusammenbauen will, dann ist das schwierig, dann muss man also zwölf oder sechzehn verschiedene Oszillatoren zusammenbauen, wenn man verschiedene Tasten gleichzeitig spielen will. Also habe ich einen Weg gefunden, um ein Dokument als ein Objekt in ein anderes einzufügen. Das heißt dieses Objekt kommt von diesem Diagramm. Dieses Dokument hat magische Objekte, das ist ein sogenanntes Outlet Objekt, das repräsentiert einen Ausgang auf dem generierten Objekt, der rote Ausgang und innen hat es nur ein Keyboard Objekt, wie wir das vorher schon gesehen haben. Das ist dann das eingebaute Patch Objekt und oben habe ich dann eingestellt, gibt mir zwölf Objekte davon und ordne die hier an und ich wollte einfach nur noch zeigen, dass man in diesem Objekt einige Parameter auch ändern kann. Also ich habe zum Beispiel ein Attribut für Parameter, das übergeordneten Objekt und diese Parameter werden hier auf dem übergeordneten Objekt mit angezeigt. Das sind also zwölf solche Objekte. Also man hat zwölf Stimmen dann für diese Orgelpfeifen. So hier kann ich hier noch an den Parameter was ändern. Also man kann einfach nur Objekte kombinieren aus der Bibliothek und dann glaube ich, es gibt bisher 400 Objekte für verschiedene Aufgaben und es scheint so, dass das Minimum ist, was man haben muss, um wirklich vernünftig Sachen machen kann, ohne ständig neue Sachen schreiben zu müssen für einfache Sachen. Ich will euch noch was zeigen, wenn ihr Arduino kennt, dann sieht das vielleicht ein bisschen anders aus. Aber was ich hier gemacht habe ist ein Potentiometer zu einem analogen Eingang angeschlossen und es ist ein Voltage, ein Spannungsteiler und es wird angeschlossen an die Stromversorgung und Erde und dann geht es wieder an den analogen Eingang. Und Arduino-Leute haben gelernt Sachen zu schreiben wie Funktion Call Analog Read und hier ist es einfach GBIO in slash analog und dann suche ich mir, werde ich den Kanal aus, an den es angeschlossen ist und auf Arduino lernen die Leute Zahlen auf der Konsole zu schreiben und den auf die Zahlen zu gucken, die da angezeigt werden und hier habe ich einen Plotter oder einen Anzeigeinstrument oder auch eine numerische Anzeige. Ich habe schon Zeigeinstrumente, dann brauche ich die numerische Anzeige nicht mehr und ich drehe an dem Knopf und man sieht, dass sich das ändert. Man hat hier die Anzeigeinstrumente und man muss nicht auf einzelne Zahlen gucken, die sich ändern, sondern man sieht es direkt wie auf einem Oszilloskop. Und ich glaube, das ist schon deutlich einfacher zu lernen, als das direkt in C zu schreiben und einfach nur einen Roman anzugucken, die durch das Terminal fliegen und man kann auch gleichzeitig sein mit PWM und die letzte Demo, dafür mache ich hier, lade ich mal, ich bin eigentlich kein Musiker, aber es macht mir Spaß, so etwas auszuprobieren. Und oben ist ein kleines Metronom, ein rechter Generator, 1,5 Hertz, das heißt 300 Beats per Minute und dann habe ich einen Zeller, der bis 16 zählt und dann gibt es einen Übertrag und der zählt dann weiter bis 4 und wenn der einen Übertrag macht, dann passiert noch was anderes und dann gibt es hier Muster und Oszillatoren und Generatoren und anderes Zeug und ich möchte dieses Jahr einmal gerade noch modifizieren. Ja, es ist ein bisschen langweilig jetzt, aber ich nehme das hier und nehme das GPIO Analog, dieses Objekt und ich mache einen 2-kanaligen Mischer, um das wieder zu kombinieren, um Einflüsse zu kombinieren, ganz schnell und ich nehme einfach den Analogen-Eingang weg jetzt und jetzt ist jetzt wie eine Drum Machine und ich hatte hier seine Baseline, ich kann auch, das sind keine Samples, es ist nur Algorithmen, das heißt man ist sehr flexibel. Ja, das ist eine sehr schöne Demonstration. Ja, es ist leider keine Zeit mehr für Fragen und Antworten, aber wenn es euch interessiert, dann geht zu ihm nach dem Vortrag und vielleicht könnt ihr euch dann irgendwo unterhalten. Bitte nochmal einen herzlichen Applaus für diesen Vortrag.