Einführung Synth-Programmierung
-
Hallo,
ich würde gerne einen Synthesizer für Linux programmieren und weiß nicht , wo ich da anfangen soll.
Ich kenne mich durchaus mit Sound-Design aus, habe grobe Ahnung vom Programmieren aber bräuchte vlt etwas Starthilfe.
Welche Themen sollte ich mir da für den Anfang ansehen? ALSA, JACK? Pulse?
-
Vielleicht Haskell
http://www.cs.yale.edu/homes/hudak/Papers/HSoM.pdf
(The Haskell School of Music von Paul Hudak)
Oder zuerstmal ein wenig mit C-Sound herumspielen http://michael-enzenhofer.jimdo.com/werkzeuge-tools/software/csound/
Ubuntu Studio:
https://ubuntustudio.org/download/
Hier z.B. in den Dokus herumgucken
Vielleicht noch ein Buch/Pdf über digitale FilterStichworte auch VST, Midi Formate (Wave, Mp3 usw.) Tracker
Mehr Hardware-Orientiert vielleicht:
https://www.youtube.com/watch?v=GLuk-puvtKo
-
gerolf h. schrieb:
ALSA, JACK? Pulse?
Das ist der "einfache" Teil, bei den Libraries geht's ja nur darum wie du die generierte Waveform "auf die Lautsprecher" bringst. Das sollte vermutlich mit allen dreien halbwegs einfach möglich sein.
Der "interessante" Teil wird vermutlich eher die Entwicklung des Codes für die Sound-Synthese. Diesbezüglich kann ich dir aber leider keine Tips geben, davon hab' ich nicht wirklich nen Plan.
-
Kommt darauf an, was du dir unter einem Syntsizer vorstellst, was und wie er den Sound erzeugt. Gibt ja verschiedene Arten.
-
Ja so die grundlegendsten Grundlagen von den Grundlagen sind mir auch noch klar. Nen Sinus zu generieren ist sicher einfacher als der nötige Code um diesen zu den Lautsprechern (bzw. zum Line OUT) zu bekommen.
Ein bisschen FM oder AM auf den Sinus draufmachen ist auch noch easy. Spannender wird es dann schon wenn man schöne Obertöne möchte, und diese dann auch noch mehr oder weniger realistisch nach dem Anschlag ausfaden sollen.
Das bewegt sich für mich noch im "geht so" Bereich.
Sobald man aber ein Ergebnis möchte dass auch nur halbwegs in der gleichen Liga spielt wie das was State-Of-The-Art Synthies so abliefern, wird es richtig kompliziert.
Die Dinger haben z.T. (stark vereinfachte) Simulationen von echten Instrumenten drinnen. Die Simulation selbst zu programmieren ist dabei vermutlich noch der einfachere Teil. Nur draufzukommen was man weglassen kann und was nicht, und die Stellen wo man gröber schummelt so zu "tunen" dass es trotzdem gut klingt... das stelle ich mir recht "spannend" vor.Egal, back to topic.
@gerolf h.
gerolf h. schrieb:
ich würde gerne einen Synthesizer für Linux programmieren und weiß nicht , wo ich da anfangen soll.
Ich würde vermutlich erstmal den Teil "Waveform zum Line OUT bringen" implementieren. Mit nem einfachen Sinus oder sowas. Oder vielleicht auch mit nem Audiosignal das du aus nem .WAV File oder so ausliest.
Die zweite Interessante "Nebensache" neben der Soundausgabe ist vermutlich wie du Steuerwerte in deinen Synthie hineinbekommst. Wenn du den Synthie direkt in einer GUI Applikation (bzw. allgemein einer "interaktiven" Applikation) laufen lässt, dann ist das kein Thema. Wenn der aber als eigener Prozess läuft, dann musst du dir da auch irgendwas basteln. Sollte auch nicht ganz so schwer sein, im Prinzip sollten ein paar Variablen in einem Shared-Memory Bereich ausreichend sein.
Bzw. falls du möchtest dass ein Synthie über MIDI steuerbar ist wird dieser Teil etwas aufwendiger.
Und wenn die beiden Sachen mal stehen, dann kannst du dich auf den Souns-Synthese Teil stürzen.
ps: Eine weitere Möglichkeit wäre noch die Plugin Schnittstellen der diversen Sequencer Programme anzusehen. Keine Ahnung wie kompliziert die selbst sind, aber das würde dir auf jeden Fall die Sache mit der Soundausgabe abnehmen, und ein fertiges System für die Sache mit den Steuerwerten anbieten. Was nicht heisst dass das damit alles trivial wird, es gibt Plugin Schnittstellen die furchtbar kompliziert und schlecht dokumentiert sind, gibt aber auch gute/einfache.
-
Die wichtigste Schnittstelle ist VST, dann gibt es noch zu vielen VST-Synths Source-Codes, die kann man sich ebenfalls anschauen.
Ein Weg einer Instrumentsimulation ist, wenn das Instrument ein analog-elekronisches ist, das Verhalten der Schaltkreise und Bauteile zu imitieren.
(viel Arbeit..)
(auch (Echtzeit-)Digitalfilter nicht ohne)
Einfacher: mit Wave-Schnippseln z.B. Anblasgeräusche und einfachen Wellenformen arbeiten (Additive Synthese mit vielen Sinussignalen oder andere Wellenformen) Für Filter gibt es bestimmt auch irgendwo Standardvarianten mit Sourcecode.
(Ziemlich gut in Teilbereichen geklungen hatte die Phase-Distortion-Synth Technik, die basiert ebenfalls auf einfachen Wellenformen:
https://en.wikipedia.org/wiki/Phase_distortion_synthesis
)
Noch einfacher: Erstmal ein Drumcompi mit Samples und Midi (z.B. als VST)Außerdem sollte man sich auch Gedanken über eine gute Bedienung und eigenen Pluginschnittstelle Gedanken machen (z.B. für Filtervarianten).
edit: ganz gute Soundbeispiele der Phase-Distortion-Technik u.a.:
https://www.youtube.com/watch?v=7XGbKV6GIDo Casio Cz 3000 Sounddemo
https://www.youtube.com/watch?v=c9iIHNVh36A Casio Cz 101 Soundemo
https://www.youtube.com/watch?v=z8byYyB2HVc Modular Monthly: Exploring phase distortion synthesis with the WMD PDO
Viele soundtechische Modulationszusammenhänge lassen sich am besten mit einem großen, nahezu vollmodularen Modulsystem erarbeiten.
(alle Modulationsmöglichkeiten die man gerne hätte, gibt es natürlich selten)
(selber kann man auch nachhelfen, z.B. Erbsen auf die Lautsprecher oder den Farbton in der Umgebung umschalten.)