Audio / Synthesizer Programmiersprachen vs Faust vs Supercollider vs PureData vs C und so weiter…

Faustworks ist die IDE für Faust


eher nicht. Dann hast du nur klickibunti, aber nicht das, was stattfindet wenn es dann wirklich zu Sache geht.
ja, das hatte ich gestern installiert und dann auf der Faustwebsite gesucht.. dort steht lapidar dass man das nicht verwenden soll und das nicht gepflegt wird.

Ich hatte dann probeweise ohne zu wissen was ich tue was reingeladen und es gab ne Fehlermeldung.
Eigentlich ist es so dass ich nichts mehr mit DSP machen wollte, aber jetzt hab ich halt die zwei Synthesekonzepte die echt sehr nett sind weil super intuitiv bedienbar,
und die würd ich noch ganz gern sinnvoll zum laufen bringen,
 
Zuletzt bearbeitet von einem Moderator:
mit pure data mache ich seit etwa 17 jahren mus
ich hab vor Jahren viel Deine Musik gehört, hatte einige Alben von Deiner Seite.

Wie gesagt fehlt mir bei beiden, Faust und PD der Gesamtüberblick und das Verständnis wie es grundlegend funktioniert, dh das Konzept.
 
Zuletzt bearbeitet von einem Moderator:
umgekehrt willst du dann aber doch so etwas wie midi import schon fertig dabei haben :) - was nun wirklich viel, viel einfacher selbst zu machen wäre wie cos oder root es sind.
sqrt und trig steht oben mit drin, aber das sind genau die Funktionen wo man stark zwischen CPU und unnötiger Präzision abwägen kann, und in meinem Fall auch will.

Wobei sqrt heutzutage recht schnell sein soll und es sich da vielleicht nicht so lohnt.

Phasenrampen sind auch nicht immer gleich, evtl will man eine die 16 Bit durchgeht für ne Table, oder eine von 0..1 oder von -0.5...0.5.

Also gut finde ich wenn man bei sowas reinschauen kann und dann feststellen kann dass es besser gemacht ist als mans selber würde.
 
im GPU bereich wird sqrt immer noch gerne abgekürtzt, aber für audio willst du glaube ich mehr als häufig in float bleiben.

okay bei phase verstehe ich das natürlich, aber wirklich, die existenz von fertigen klassen und befehlen soll dich doch nicht daran hindern zusätzlich dazu eigene zu machen.

überflüssige knöpfchen und submenus in contextmenus gehen mir viel mehr auf den keks wie content, den man ja nur sieht, wenn man ihn gezielt aufruft.

richtig, und bei faust hast du dann auch immer gleiche die source... für den notfall. :)
 
es geht mir darum wie schnell ich etwas lerne und wie schnell ich zum Einstieg, Überblick und zu Erfolgserlebnis komme.
Die Synthsengine ist bis auf MIDI fertig. Dh ich hab wenig Anreiz da jetzt nochmal Tage damit zu verbringen das ganze nochmal zu machen und vorher erstmal n neues Paradigma und Umgebung zu lernen und dann Bugs finden usw.
Bei Pixilang wars halt erstmal nur rumspielen ohne Ergebnisdruck und deswegen und weils so überschaubar ist was anderes...
 
dort steht lapidar dass man das nicht verwenden soll und das nicht gepflegt wird.
oh, hatte ich nicht gesehen. Ich habs im Ubuntu-Repository gefunden und installiert, aber noch nicht ausprobiert.

Jetzt habe ich es tatsächlich geschafft, Code einzugeben. Aber ich finde keine Möglichkeit, ihn laufen zu lassen. Ok, hat sich dann wohl erledigt.

WebIDEs finde ich blöd, weil man immer auf Internet angewiesen ist.
 
ich will dich keinesfalls von deinem weg abbringen und kann sehr gut verstehen, dass man sich sein wunschenviroment zusammenträumt und das bestehende zeugs ablehnt.

es ist aber mehr als wahrscheinlich, dass du niemals eine programmierumgebung finden wirst, die so ähnlich zu einer anderen ist, dass man innerhalb von stunden seine eigenen arbeiten ganz ohne fleiß und mühe übersetzen kann.

ganz im gegenteil ist die tatsache, dass du dein DSP zeug beherrschst eine prima voraussetzung dafür, anhand dessen dein einstieg in eine neue umgebung zu lernen.

(sagt der, der es seit 20 jahren nicht schafft, mal etwas neues auszuprobieren. :sad: )
 
es ist aber mehr als wahrscheinlich, dass du niemals eine programmierumgebung finden wirst, die so ähnlich zu einer anderen ist, dass man innerhalb von stunden seine eigenen arbeiten ganz ohne fleiß und mühe übersetzen kann.
Vielleicht ist es zu empfehlen, in einer neuen Umgebung erst mal was fundamental neues zu machen, am besten ohne Ziel, einfach ausgiebig spielen und dabei möglichst früher gemachte Erfahrungen aus anderen Umgebungen ausblenden. Andererseits nehme ich erleichtert zur Kenntnis, das andere ähnlich verkopft sind wie ich. Verkopftheit und Offenheit für neues schließt einander aus. Mein Kopf ist nicht kreativ. Allenfalls sitzt er auf der Kreativität wie ne dusselige Oma auf ihrem gesuchten Gebiss.

Noch ein Kalenderspruch: Eile streut Hindernisse auf deinen Weg.
 
node.js ist eine gute Umgebung für den Raspberry Pi. Es gibt ne riesige Community, praktisch für alles wichtige (hier z.B. interessant: MIDI, OSC, Webserver, Sockets) entsprechende Moduln und man kann weitere CLI-Prozesse spawnen und mit diesen interagieren. File-I/O, umfangreiche Unterstützung für config-Files und mit TypeScript sind sogar hochkomplexe, typsichere Anwendungen möglich. Schnell ist es außerdem und wenn's NOCH schneller sein muss, dann kann man auch entsprechend vorkompilierte C/C++-Moduln einbinden oder per Child-Process in einem eigenen Thread (im Kreise rund) laufen lassen.

JavaScript ist nicht umsonst eine der wichtigsten Sprachen überhaupt. Ich fummle mir gerade einen Raspberry Pi 3B+ zu einem "Man-in-the-Middle" zurecht, der erstens per Webbrowser angesprochen werden kann, zweitens frei konfigurierbares Midi-Routing zwischen allen am PI angeschlossenen/registrierten MIDI-Devices kann, zweieinhalbtens lustige MIDI-Manipulationen durchführen kann und drittens umfangreiche Sysex-Definitionen für meine Roland-Rompler (JV880/JV1080) enthält. Meine Zielsetzung war, dass ich mein Android-Tablet (und jedes andere Gerät im Netzwerk mit einem halbwegs aktuellen Browser) zum Patch-Editing für die angeklemmten MIDI-Geräte benutzen kann. Ohne App-Installationen. Ohne teure Kauflösungen. Ohne Hardware-Programer. Und dank Sockets werden alle Änderungen quasi in Echtzeit an alle anderen offenen Browser geschickt.
 
Zuletzt bearbeitet:
Hast meinen Rant und Anliegen und Bedürfnisse und Anforderungen nicht verstanden, macht nichts, und rantest und beschimpfst einfach mal auch, macht auch nix, aber falls Du was konstruktives zu Thema beizutragen hast wär das dennoch gerne gesehen.
Genau: So wie man in den Wald ruft, schallt es heraus. Warum soll ich Leuten helfen, die so respektlos die Arbeit anderer bewerten, und das schon, bevor sie sich ernsthaft damit beschäftigt haben? Aber okay, Dein Tonfall heute ist ja ganz vernünftig, also versuche ich es doch noch mit was konstruktiven.

Mein erster Rat wäre eigentlich erstmal genau zu beschreiben was Du vorhast. Du erwähnst erst in #26 das Du schon eine Synthengine fertig hast. In was denn? Von den restlichen Posts würde ich mal auf Reaktor Core tippen. Ich finde das eine recht wichtige Info um ein passenden Tool vorzuschlagen. Falls Du schon C-Code hast, würde ich z.B. vorschlagen mal zu schauen, ob aus dem nicht relativ einfach ein Pd External gemachent werden kann (https://github.com/pure-data/externals-howto). Falls es wirklich Reaktor Core ist, könnte Faust tatsächlich recht passend sein, ich denke die Core Strukturen sollten sich relativ einfach 1:1 in Faust übertragen können, wenn man die Grundidee von Faust verstanden hat (und die Dokumentation von Faust ist ziemlich gut). Hier würde ich aber als erstes mal versuchen, ob Du eins der Demos auf der Platform Deiner Wahl zum laufen bekommst (gilt für Pd natürlich auch). Dank der WebIDE ist dies ja sehr einfach zu testen.

Falls das ganze realtime tauglich sein soll, und völlig knackserfrei laufen soll, rate ich zu Vorsicht bei Sprachen mit JIT und GC. Ich habe mir mit Protoplug (https://www.osar.fr/protoplug/) ein recht netten Looper gebastelt, aber mich halt irgendwann damit abgefunden, dass ich nicht alle Code-Branches bei der Initializierung mal durchlaufen lassen kann, und lebe nun halt damit, dass es in den ersten Minuten mal ab und zu knackst. Habe leider keine Zeit, den nach C++ zu portieren, meine wenige Freizeit geht gerade schon für meinen Sequenzer drauf.
 
WebIDEs finde ich blöd, weil man immer auf Internet angewiesen ist.
Die WebIDE Ist aber ja nur eine Option und keine Pflicht (und das lokale Arbeiten ist in der Dokumentation auch erläutert). Aber halt meines Wissens ist der WebIDE Editor der einzigste mit integrierter Hilfe, für Emacs gibt es aber immerhin ein Package mit Autocomplete für Library Functions.
 
t. Du erwähnst erst in #26 das Du schon eine Synthengine fertig hast. In was denn?
zwei, eine in Pixilang und eine in Core, wobei ich aber gar keinen Rechner mehr hab auf dem Reaktor läuft dh den zweiten muss ich eh nochmal neu planen.
Es gibt auch noch paar andere Sachen die ich umsetzen könnte.

Pixilang basiert auf ner VM und nem Interpreter der den Code beim Laden für die VM übersetzt, und ist entsprechend langsam.
 
Das Web IDE von Faust funktioniert bei mir weder in Firefox noch in Chrome richtig,
dh die Diagramme werden nicht angezeigt.
Mehr als Dreizeiler damit zu machen erscheint mir auch zu hakelig und unresponsive.
At this point, you should be able to use and plug various elements of the Faust libraries together. The Faust libraries implement hundreds of functions
Der Witz ist dass an diesem Punkt weder die Ein- und Ausgänge der Funktionen noch sonst irgendwelche Grundlagen der Syntax erklärt wurden und das erst im Folgenden passiert.

Wahrscheinlich ist es Übungssache aber ich finde den Code erstmal eher schlecht lesbar und er scheint mir die Nachteile visueller Blockstrukturen mit den Nachteilen von willkürlicher Spezialsyntax und Skripten zu kombinieren.

Hm.
 
Das Web IDE von Faust funktioniert bei mir weder in Firefox noch in Chrome richtig,
dh die Diagramme werden nicht angezeigt.
Mehr als Dreizeiler damit zu machen erscheint mir auch zu hakelig und unresponsive.

Das Diagramm wird vom Compiler erstellt, sprich Du musst Run drücken (oder die Real-time Compile Option aktivieren). Und bei mir läuft die Web IDE sogar unter LibreWolf problemlos (was ich von genug anderen Seiten nicht behaupten kann).

Der Witz ist dass an diesem Punkt weder die Ein- und Ausgänge der Funktionen noch sonst irgendwelche Grundlagen der Syntax erklärt wurden und das erst im Folgenden passiert.

Das ist ein Quick Tutorial, mit dem Ziel Leute schnell zu ersten Erfolgserlebnissen zu bringen. Und bis zu dem Punkt wurde der : Operator erklärt, der benötigt wird um Funktionen zu sequential zu verbinden, und Beispiele von solchen Funktionen gezeigt. Und sorry, auch schon erklärt wie Funktionen aufgebaut sind, und das durch den : Syntax das Ergebnis der vorrigen Funktion automatisch als letztes Argument der folgenden Funktion eingesetzt wird (das Konzept nennt sich Piping, in Julia ist der Operator dann z.B. |> oder in R %>%). Die Aussage des Autors ist also völlig korrekt, aber klar, schuld am eigenen Unvermögen sind immer die anderen.
 
Zuletzt bearbeitet:
Ich empfehle ook.
Die Sprache hat nur 3 Syntax Elemente und nur 9 Befehle, ist dennoch Touring Vollständig und kann in jedem Editor geschrieben werden. Der Code kann nach BrainFuck konvertiert werden, und für BrainFuck gibt's einen Linux Compiler. Den kann man sich bestimmt auch für Raspberry Pi bauen. Ich gehe davon aus, dass der sauschnellen Code erzeugt, weil die Sprache sehr Low Level ist. Damit sind wohl die meisten Anforderungen des Thread Starters erfüllt. Ich wünsche viel Erfolg bei seinen Projekten!
 
Wahrscheinlich ist es Übungssache aber ich finde den Code erstmal eher schlecht lesbar und er scheint mir die Nachteile visueller Blockstrukturen mit den Nachteilen von willkürlicher Spezialsyntax und Skripten zu kombinieren.

Hm.

Und übrigens, es sind fucking 5 Operatoren, die man halt mal verstanden haben muß, aber einen dafür dann mit einen wunderbar lesbaren Signalflow belohnen (und ausser ~ finde ich eigentlich die gewählten Symbole auch für sehr anschaubar. Und die Blöcke sind nichts anderes als Funktionen, nicht umsonst stehen Faust für Functional Audio Stream. Es jetzt als Nachteil verkaufen so wollen, dass der Signalflow auch als Diagram angezeigt werden kann, finde ich schon sehr gewagt.
 
Freut mich dass ihr so gewitzt seid. Offenbar macht sich bei mir schon das Alter bemerkbar.

Darf ich mal fragen welche Projekte ihr so in Faust realisiert habt und wie lange ihr dafür gebraucht habt?
Mein Synthkonzept ist relativ kompakt, eine Umsetzung in Reaktor Core würde deutlicher weniger als ein Tag dauern, vielleicht 5 Stunden.
Dh ich würde gerne innerhalb eines Wochendes die Portierung abschliessen können und mich lieber mit Konzepten auseinandrrsetzen.

Aber erzählt mal von Euren Projekten.
Es jetzt als Nachteil verkaufen so wollen, dass der Signalflow auch als Diagram angezeigt werden kann, finde ich schon sehr gewagt.
Äh. Ja. Hat das jemand?
 
ACHSOOOOO entschuldige, da habe ich dich offenbar missverstanden! Mir war mir nicht klar, dass es hier um tatsächliche Projekte geht, weil dieser Thread doch primär damit gefüllt ist, welchen Sprache deiner Meinung nach welche Unzulänglichkeiten hat.

Ich hatte das als Aufforderung verstanden, dir eine möglichst passende Sprache zu suchen.

Bei meinen eigenen Projekten sind mir andere Dinge wichtig, als dir: Ich möchte z. B. in einer Sprache arbeiten, die eine große Community hat, so dass ich Lösungen im Internet finde, wenn ich auf ein Problem stoße. Und ich möchte, dass diese Community die Sprache aktiv pflegt, so dass ich sicher sein kann, dass ich mein Projekt auch in 2 oder 3 Jahren noch weiterführen kann, und nicht den Compiler oder Runtime Umgebung aus einem Legacy Repository popeln und zum laufen bekommen muss. Im Gegenzug schreie ich auch nicht bei jeder Third Party Library "Telemetrie! Überwachung!".

Aber ich hab auch einen "großen" Computer, und bin nicht drauf angewiesen, alles auf einem Android Tablet oder Raspberry Pi zu machen.

Ich fürchte, ich kann dir bei deinen Problemen nicht helfen, deswegen bringt es dich nicht weiter, wenn ich dir darlege, wie ich meine bescheidenen Programmierprojekte umsetze.
Aber tob dich hier ruhig weiter aus, ich lese hier gerne weiter amüsiert mit, und verspreche still zu sein.
 
Zuletzt bearbeitet:
Freut mich dass ihr so gewitzt seid. Offenbar macht sich bei mir schon das Alter bemerkbar.
Man kann gerne Dinge nicht so schnell verstehen, und dann höfflich nachfragen. Aber ungerechtfertigerweise erstmal die Schuld anderen zu geben, geht halt garnicht. Vor allem bei Open Source Projekten.

Darf ich mal fragen welche Projekte ihr so in Faust realisiert habt und wie lange ihr dafür gebraucht habt?

Ich hatte mal angefangen meinen Looper mit Faust zu entwickeln, da aber bei dem Projekt der DSP Teil eigentlich sehr simple ist, und das Hauptproblem eher die Steuerung per Hardware+Feedback war, bin ich dann zu Protoplug gewechselt, mit den schon weiter oben beschriebenen Konsequenzen.

Äh. Ja. Hat das jemand?

Du hast was von "Nachteile visueller Blockstrukturen" gesprochen, ich habe Dir versucht klarzumachen, dass Faust in erster Linie eine funktionale Programmiersprache ist, und die visuelle Darstellung nur ein nettes Addon. Oder meinst Du, dass alle funktionale Programmiersprachen die "Nachteile visueller Blockstrukturen" mit sich bringen?
 
ich meinte die spezielle Syntax in der versucht wird Pfade abzubilden die sich damit aber dann doch nicht abbilden lassen.
 
es fehlt das Wort "lesbarer" um auszudrücken was ich meinte.
Sicher lassen sich alle Pfade abbilden weil die am Ende ja auch nur sequenziell abgearbeitet werden, aber ich seh in der Sprache dabei keinen Vorteil gegenüber klassischen Funktionen mit beliebig vielen (!) Übergabeparametern.

Selbst übliche kleine Strukturen wie ein 3-Kanal FDN lassen sich ja zB nicht adequat
dh mit allen Kanälen gleichartig abbilden, die Struktur ist dann verworrener als
in einer herkömmlichen Programmiersprache oder in einer herkömmlichen 2D Darstellung.
Das meinte mit ich mit Nachteilen beider Darstellungen.

Vermutlich hat es den Vorteil dass es kompakter kompiliert werden kann,
aber ich denke 2022 muss mensch sich eigentlich nicht mehr an Maschine anpassen sondern andersrum, ähnlich sehe ich das eben auch mit Semikolon zB :

Der Programmierer braucht ihn nicht, der Compiler sollte ihn auch nicht brauchen.
Und zwar egal ob man mehrere Statements in einer Zeile hat oder nicht.
 
es fehlt das Wort "lesbarer" um auszudrücken was ich meinte.
Sicher lassen sich alle Pfade abbilden weil die am Ende ja auch nur sequenziell abgearbeitet werden, aber ich seh in der Sprache dabei keinen Vorteil gegenüber klassischen Funktionen mit beliebig vielen (!) Übergabeparametern.

Selbst übliche kleine Strukturen wie ein 3-Kanal FDN lassen sich ja zB nicht adequat
dh mit allen Kanälen gleichartig abbilden, die Struktur ist dann verworrener als
in einer herkömmlichen Programmiersprache oder in einer herkömmlichen 2D Darstellung.
Das meinte mit ich mit Nachteilen beider Darstellungen.

Vermutlich hat es den Vorteil dass es kompakter kompiliert werden kann,
aber ich denke 2022 muss mensch sich eigentlich nicht mehr an Maschine anpassen sondern andersrum, ähnlich sehe ich das eben auch mit Semikolon zB :

Der Programmierer braucht ihn nicht, der Compiler sollte ihn auch nicht brauchen.
Und zwar egal ob man mehrere Statements in einer Zeile hat oder nicht.
Als Anhänger von pipes in Programmiersprachen kommt da ein klarer Widerspruch.

Ein:
a = foo(bar)
b = foo2(a)

finde ich weniger lesbar (und mehr an die Maschine angepasst) als ein

foo(bar) : foo2

Das gilt auch für den Fall, dass man die erste Formulierung reduziert auf

foo2(foo(bar))

Menschen lesen nun mal von links nach rechts (zumindest in vielen Regionen), und pipes funktionieren wunderbar dazu.

Oder nehmen wir mal den Fall an, wir wollen in Faust parallel zwei verschiedene Effekte benutzen

in <: effekt1, effekt2 :> out

ist doch viel leichter zu lesen (nachdem man gelernt hat, das <: der spilt-operator und :> der merge-operator ist als

out1 = effekt1(in)
out2 = effekt2(in)
out = out1 + out2

Vor allem wenn in den parallel strängen noch mehr passiert, dann haben wir:

in <: effekt1 : effekt3, effekt2 : effekt4 :> out

out1 = effekt1(in)
out1b = effekt3(out1)
out2 = effekt2(in)
out2b = effekt4(out2)
out = out1b + out2b

Viel Spaß bei der Fehlersuche, wenn Du irgendwo mal doch die falsche Variable referenzierst (ich wollte z.B. spontan eben out = out1 + out2 schreiben)

Vor allem hält Dich niemand davon ab, auch letzteres in Faust zu schreiben, <: etc. sind ja eigentlich nur syntatic sugar.

Was das Semikolon angeht, ja, vielleicht könnte das vom Compiler automatisch hinzugefügt werden. Faust ist Open Source, Du kannst ja gerne versuchen das zu implementieren.
 
Zuletzt bearbeitet:
oder audio synthese ausgerechnet mit "javascript" machen, haha. da ist ja löten schneller.

ich wünsch dann den blinden hier noch viels spass mit der farbe.

Wer hat hier davon gesprochen? Ich hab explizit auf andere Threads und Interoperabilität hingewiesen. In der wirklichen Welt soll es ja Projekte geben, die mehr als nur eine einzige Sprache und Laufzeitumgebung umfassen...
 
Als Anhänger von pipes in Programmiersprachen kommt da ein klarer Widerspruch.

Ein:
a = foo(bar)
b = foo2(a)

finde ich weniger lesbar (und mehr an die Maschine angepasst) als ein

foo(bar) : foo2

Das gilt auch für den Fall, dass man die erste Formulierung reduziert auf

foo2(foo(bar))

Menschen lesen nun mal von links nach rechts (zumindest in vielen Regionen), und pipes funktionieren wunderbar dazu.

Oder nehmen wir mal den Fall an, wir wollen in Faust parallel zwei verschiedene Effekte benutzen

in <: effekt1, effekt2 :> out

ist doch viel leichter zu lesen (nachdem man gelernt hat, das <: der spilt-operator und :> der merge-operator ist als

out1 = effekt1(in)
out2 = effekt2(in)
out = out1 + out2

Vor allem wenn in den parallel strängen noch mehr passiert, dann haben wir:

in <: effekt1 : effekt3, effekt2 : effekt4 :> out

out1 = effekt1(in)
out1b = effekt3(out1)
out2 = effekt2(in)
out2b = effekt4(out2)
out = out1b + out2b

Viel Spaß bei der Fehlersuche, wenn Du irgendwo mal doch die falsche Variable referenzierst (ich wollte z.B. spontan eben out = out1 + out2 schreiben)

Vor allem hält Dich niemand davon ab, auch letzteres in Faust zu schreiben, <: etc. sind ja eigentlich nur syntatic sugar.

Was das Semikolon angeht, ja, vielleicht könnte das vom Compiler automatisch hinzugefügt werden. Faust ist Open Source, Du kannst ja gerne versuchen das zu implementieren.
Ja, ich geh wahrscheinlich einfach zu sehr von meinem konkreten Vorhaben aus wo das jetzt kein Vorteil wäre
 
ich hab mich jetzt entschieden wenn mich die Laune überfällt es mit PureData zu versuchen.
Obwohl Faust ja eigentlich sehr viel eher meinen Vorstellungen entspricht.

Hauptgrund ist dass es bei Faust zu viele Unwägbarkeiten gibt, zu viele Baustellen,
known bugs, zu umständlicher make Prozess, zuviele Flavours.
Je nachdem was man damit macht hat man es da ja mit 4 unterschiedlichen Programmiersprachen zu tun ( Faust, C, JavaScript IDE und gebenfalls noch eine vierte für einen Wrapper) plus den eigentlichen Maschinecode.
 


Zurück
Oben