Offline-Synthesizer "Sompyler" generiert still Audiodateien aus Klang und Musik definiert als YAML/JSON

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
gotridofmyphone
User
Beiträge: 26
Registriert: Mittwoch 15. März 2017, 08:54

Mittwoch 17. Januar 2018, 08:41

Hallo,

(Bitte an die Moderation: Könntet ihr bitte den alten Thread Melosynth – ein ziemlich einfacher Synthesizer (116 Codezeilen) löschen oder die Themen vereinigen, aber mit dem Betreff des neueren? :) )

Es war schon immer ein Traum von mir, Musik und Klang aus Text zaubern zu können, wie überhaupt alles, was man mit dem Computer aus reinem Text rendern kann, die Aura von Zauber hat, mit dem Text als Zauberspruch. So gesehen ist das einfach archaischer, mystischer als diese in meinen Augen stupide Klickerei, vergleichsweise eine Bevormundung, Einhegung der Nutzer durch diejenigen, die diese Oberflächen entwickeln, Oberflächen, die die Tiefe verdecken, das echte Verständnis erschweren von dem, was man da tut. Stattdessen lernt der GUI-Bediener – auch ich bin einer, gezwungenermaßen, denn ich kann ja nicht alles selbst machen – wie eine Laborratte, die im Labyrinth auf der Suche nach dem Futterknopf ist. Der Profi-Texteditor, also emacs, vim und andere, oder umgekehrt, als universelles Interface, diese Arbeitsweise ist für mich alles andere als veraltet und überkommen, sondern gerade zeitlos. Vielleicht wird man eines Tages von den semantischen und akustischen Missverständnissen von Siri & Co. die Nase voll haben, auch von "ach so einfachen", aber letztlich nur unübersichtlichen und verdummenden Benutzeroberflächen irgendwelcher Handyapps. Computer sind zu programmieren, damit sie dem Menschen dienen, denn der Mensch ist nicht dazu da, den Computer zu bedienen. Oops, ich merke, ich rede mich gerade in revolutionäre Rage, aber hey, ich will nur sagen: Ich entwickle Sompyler als textbasiertes Tool, damit es genauso lang Bestand hat wie HTML und Konsorten. Der Pythoncode drumrum diene dabei nur als Referenzimplementierung, um zu beweisen, dass Musikinstrumente aus YAML-Text zum Klingen gebracht werden können.

Damit schwimme ich quasi gegen den Strom der Synthesizer und DAWs, die mit überladenen GUIs zu beeindrucken versuchen. Für mich ist das nichts. Damit habe ich nur immer gelangweilt rumgespielt, aber Ambitionen Musik zu machen sind damit keine erwacht. Mir ist aber auch klar, dass der Ansatz der textuellen Definition nur eine kleine nerdige Zielgruppe gewinnen dürfte in der Szene der elektronischen Musik (im weiteren Sinne, nicht nur Techno), denn es ist auch abseits musikalischen Denkens recht anspruchsvoll so zu arbeiten.

Sompyler unterscheidet sich von anderen Audioprogrammiersprachen dadurch, dass es mit blanken hierarchischen Datenstrukturen gefüttert wird. Ist also eine rein deklarative Sache. Diese Datenstrukturen werden im YAML-Format erwartet, oder JSON, das ja von ersterem nur eine Teilmenge ist.

Zur Zeit arbeite ich besonders am Klavierton. Bin zwar weder in der Lage noch ambitioniert, Klavierbauern ernsthafte Konkurrenz zu machen. Der Klang meines billigen Stage-Pianos, das ich mein eigen nenne, genügt mir "nur", aber seit ich bei meinem Klavierlehrer die Bodenständigkeit und den Klangreichtum eines echten Flügels kennenlernen darf, hab ich höhere Ansprüche. Sompyler hat die Fähigkeit, virtuelle Klänge kontinuierlich bézierkurvenförmig in beliebiger Auflösung, und natürlich teiltonweise unabhängig zu produzieren, ebenso unabhängig ist jeder Teilton darüber hinaus modulierbar. Zudem können die Klangeigenschaften notenspezifisch variiert werden, wie bei einem echten Klavier jede Taste ihren eigenen Klangcharakter hat.

Musikalisch wird jeder Takt in einem eigenen YAML-Dokument definiert, wobei mehrere aneinander gehangen werden (YAML-Streams). Unendlich viele Stimmen sind möglich. Das gleiche Instrument kann mehrere Stimmen umsetzen. Jede Stimme kann eine eigene Dynamik und einen eigenen Dynamikumfang besitzen, und natürlich frei auf der virtuellen Bühne positioniert werden, woraus sich die Stereoposition ergibt (Surround wird derzeit noch nicht unterstützt). Der Rhythmus wird als Offset und Notenlängen über Ganzzahlen in der Einheit "Tick" angegeben. Wie lang ein Tick ist, kann taktweise statisch festgelegt werden, oder als von-bis-Kontinuum. So ändert sich das Tempo langsam, ohne dass an den Tickwerten herumgeschraubt werden muss. Ähnliches gilt für die Dynamik. Stimmen können lauter und leiser werden.

So habe ich die Hoffnung, dass man mit Sompyler auf einem stinknormalen PC Musik machen kann, die klingt als käme sie aus einem Studio mit Geräten, die in der Summe mehr kosten als S(olo-)U(mweltschänder-)V(ehikel). Gut, natürlich haben andere Projekte den gleichen Anspruch, das ist ja überhaupt der typische Anspruch aller Software-DAWs. Das Rad neu zu erfinden hat für mich nunmal schon immer Spaß bedeutet.

Sompyler ist unter der GPL auf Github publiziert: https://github.com/flowdy/sompyler/

Eine typische Befehlszeile sieht so aus:

Code: Alles auswählen

scripts/sompyle test_examples/loreley.spls /tmp/loreley.flac
Voraussetzungen: Python 3, numpy, soundfile. (scripts/render-single-sound benötigt zusätzlich matplotlib).

Es wird keine spezielle Soundhardware benötigt, allerdings sollte eine gute Soundkarte/Lautsprecher vorhanden sein, damit niemand sage, die Ergebnisse klingen schlecht und dann liegt es an schlechten Voraussetzungen.

Wer Cython installiert, kann Sompyler mit dem folgenden einmalig auszuführenden Befehl aufs ca. 2,5-fache beschleunigen. Sompyler ist aber nicht darauf angewiesen.

Code: Alles auswählen

python3 Sompyler/synthesizer/shape/cythonize-bezier-gradient.py build_ext --inplace
Resonanz, natürlich auch kritische und konstruktive, erwünscht und dankend angenommen. Mitarbeit? Sehr gerne :)
Antworten