Softwareideen

R
richy
HCA Soundprogrammierung
HCA
Zuletzt hier
02.05.12
Registriert
12.10.04
Beiträge
2.381
Kekse
3.159
Hi
Die Klangerzeugung von Synthesizern wird heute nicht mehr zusammengeloetet, sondern ueber Softwarealgorithmen berechnet. Besonders deutlich wird dies bei den ganzen VST Plugins. Hier wurden auch schon nichtlineare Methoden neuronaler Netzwerke verwendet wie beim Hartman Neuron VS.
http://www.hartmann-music.com/home/us/news/
Vielleicht hat der eine oder andere Forenbenutzer diesbezueglich eigene Ideen, die man in diesem Thread vorstellen und diskutieren koennte. Leef hat z.B. einen Midiprozessor programmiert der recht interessante Moeglichkeiten bietet. Quellen zu Programmiertools, z.b Wandlung von Zahlenreihen in Audiofiles waeren willkommene Hilfsmittel fuer einen Thread zu Audio Software Experimenten.
In dem Bereich bin ich momentan leider selber nur schlecht ausgestattet. Unter Dos war dies einfacher.

Im folgenden moechte ich als Beispiel eine Programmidee, ein Klangerzeugungskonzept, vorstellen, das mir vielversprechend erscheint.

Ausgangspunt ist eine "einfache" nichtlineare Differenzengleichung. Die logistische Gleichung. Ein spezieller Schnitt durch die Mandelbrotmenge :
y(k+1)=r*y(k)*(1-y(k))
http://de.wikipedia.org/wiki/Logistische_Gleichung
Diese iterative Abbildung ist sehr einfach zu implementieren und aus der Chaostheorie recht bekannt. Inzwischen auch Schulstoff. Fuer Anfangswerte y0 im Intervall y0=[0..1] erhaelt man in jedem Iterationsschritt eine Funktion im selben Intervall [0..1]. Der Parameter r=[0..4] steuert dabei das Verhalten der Funktion wie es z.B. im WIKI Link beschrieben wird.
Das Feigenbaumdiagramm zeigt ueber die Attraktoren das Verhalten des Steuerparameters r.
Allerdings klingt die Funktion y[k] als Audiosignal nicht sonderlich interessant. Es gibt auch Ansaetze von meist avangardistischen Kuenstlern, die die Iterationswerte als Mididaten verwenden.
Aber auch hier ist im Gegensatz zur visuell beeindruckenen Mandelbrotmenge das Ergebnis eher wenig spektakulaer. Man koennte auch sagen "duerftig" :)
http://optimierung.mathematik.uni-kl.de/~nchrist/MAMUSI/5mathematik_musikalisch_in_.htm
Naja, es gibt eine Vielzahl solcher "Versuche".
Ist die logistische Gleichung so unmusikalisch ? Vielleicht verwendet man nur die falschen Zahlenwerte ?
Der 2 er Zyklus stellt einen Rechteckgenerator da und der 4 er Zyklus die Ueberlagerung von Rechteckfunktionen.
Bei r annähernd 3,57, dem Feigenbaumpunkt beginnt das Chaos. Wie man auch im Klangbeispiel des Links hoert.
Dieses ist immer wieder von selbstaehnlichen Inseln der Ordnung unterbrochen. Z.B. bei r=1+Wurzel(8) dem sogenannten grossen Fenster der Ordnung. Fuer r=1+Wurzel(9)=4 erzeugt die Iteration dann scheinbar voelliges Chaos.
So ist die allemeine Beschreibung, Einschaetzung. Das ist aber nicht ganz zutreffend. Es ist zwar wenig bekannt, aber der Mathematiker Wolfram (Schoepfer von Mathematica) hat eine analytische Loesung der Gleichung fuer den Wert r=4 gefunden. Und die Loesung ist verblueffend "einfach" :
http://mathworld.wolfram.com/LogisticMap.html
Dazu darf man aber nicht die Iterationswerte y(n,y0) selbst fuer einen Startwert betrachten, so wie dies bei den Klangkuenstlern in der Regel ueblich ist, sondern man muss die Gleichung fuer alle Startwerte y0 zu einem festen Zeit, Iterationsschritt n betrachten. Man verwendet somit nicht die Iterationswerte sondern die verketteten Polynome, die sich aus einer iterativen Verkettung der Grundgleichung r*y*(1-y) ergeben.
Klingt kompliziert, aber es ist relativ einfach. Ich habe das mal versucht hier naeher darzustellen :
http://home.arcor.de/richardon/richy2001/mathe/chaos/analytic/ana6.htm
Beispiel verketteter Polynome :
abb4.gif

In jedem Iterationsschritt wird ueber alle Anfangswerte solch ein Polynom erzeugt. Und die sehen nun doch schon mal recht wohlklingend, musikalisch aus.
Problematik :
Der Grad dieser Polynome steigt mit 2 hoch n. Dazu gleich mehr.

Fuer Wolframs Loesung fuer r=4, das angebliche Chaos zeigt sich schliesslich, dass das Polynom mit der einfachen Koordinatentransformation s=1-2*x einem frequenzmodulierten Sinus entspricht.
okt2.gif

dessen Frequenz mit jedem Iterationsschritt n proportional zu 2 hoch n steigt.
Wuerde man sich in dieser Form die logistische Gleichung anhoeren erhielte man kein Chaos, sondern ein Sinus mit Vibrato. Da die analytische Loesung bekannt ist laesst sich auch die Frequenzmodulation, das Vibrato zu den Raendern hin ueber eine einfache Koordinatentransformation beseitigen. Dazu bildet man den Arkuscosinus und erhaelt eine reine Sinus b.z.w Kosinusschwingung.
Ein glatter Widerspruch zur ueblichen Auffassung, dass die logistische Gleichung fuer r=4 das Chaos repraesentiert.
Das verkettete Polynom stellt hier eine Sinusfunktion dar, die aufgrund der Frequenzmodulation fuer jeden Anfangswert falsch abgestastet wird und so zu einer chaotischen Iterationsfolge fuehrt.
Fuehrt man die aus der Loesung fuer r=4 bekannte Koordinatentransformation fuer die Funktion ueber die Anfangswerte durch erhaelt man einen Sinusgenerator, der mit jedem Iterationsschritt seine Frequenz verdoppelt.
Und wenn man diese Koordinatentransformation arccos beibehaelt und r variiert erhaelt man sicherlich schon einen kleinen interessanten nichtlinearen Synthesizer. Allerdings habe ich damit bisher erst graphisch experimentiert. Ich koennte wetten dass man damit sehr interessante Klaenge erhaelt.

Auch fuer r=2 existiert eine analytische Losung der logistischen Gleichung. Die entsprechende Koordinatentransformation zur Beseitigung der Frequenzmodulation besteht aus einer Logarithmierung statt der Bildung des Arkuskosinus. Damit erhaelt man einen Rechteckgenerator. Und unter Beibehaltung der Logaithmierung und Variation von r sicherlich weitere klanglich interessante Wellenformen.

Auch fuer r=1+Wurzel(5) existiert eine analytische Loesung ...
okt3.gif

Nein, leider nicht ! Ich beschaeftige mich seit den 80 er Jahren mit dieser verflixten Gleichung.
Damals galt sie als voellig unloesbar. Nun existieren 3, davon 2 reelle analytische Loesungen. Wahscheinlich ist die Gleichung fuer andere Parameter tatsaechlich unloesbar. Wolfram gibt auf seiner Seite an, dass zumindesten bewiesen ist, dass keine weiteren Loesungen ueber die Bildung der Umkehrfunktion existieren. Schade denn es waere natuerlich interessant welche Wellenformen diese neben Sinus und Rechteck noch enthaelt.

Die logistische Gleichung enthaelt aber noch viel mehr. Vielleicht sogar alle Werke von Mozart :) ? Nee, natuerlich nicht, aber eventuell gewisse Prinzipien daraus. Dazu mehr im naechsten Beitrag.

Gruesse
 
Eigenschaft
 
Zuletzt bearbeitet:
Das klingt eher wie ein Thema für Mathematiker, mein Programm ist übrigens noch lange nicht fertig und leider im Moment auf Eis, da es im Februar Klausuren regnet... *juhu*
 
Das klingt eher wie ein Thema für Mathematiker,
Ja, die Mathematik hinter der logistischen Gleichung ist heftig. Sogar so heftig, dass selbst der beste Mathematiker diese Gleichung nicht analytisch, explizit loesen kann. Die Loesung fur r=2 und r=4 ist ueber eine Koordinatentransformation dagegen nun doch relativ leicht herleitbar. Fuer r=4 aber auch nur wenn man weiss auf welche Loesung man zusteuern muss.
http://home.arcor.de/richardon/richy2001/mathe/chaos/analytic/2010/lsgana.htm
Fuer r=2 kann man die Loesung noch einfacher, intuitiv graphisch herleiten. Ueber den Hauptsatz der Algebra :
http://home.arcor.de/richardon/richy2001/mathe/chaos/analytic/lsg3.htm

Ich bin auch kein ausgebildeter Mathematiker sondern lediglich Elektroingenieur.
Die Loesungen kann man auch ganz einfach zur Kenntnis nehmen. Wie diese entstehen ist egal.
Darueber laesst sich nun eine geeignete Koordinatentransformation basteln, die aus der Verhulst Gleichung einen kleinen Softwaresynthesizer entlockt. Das sind nicht mehr als maximal 10 Programmzeilen. Man iteriert die Gleichung nicht nur fuer einen Anfangswert sondern ein Set von Anfangswerten. Und diese verketteten Polynome wandelt man dann in einen Audiofile. Zusaetzlich mit der Option einer Koordinatentransformation. Lediglich eine zusatzlichen Programmzeile, die die analytische Loesung fuer r=2/4 beruecksichtigt.
Ok ich sehe schon. Da muss ich wohl ein Audiobeispiel basteln :)
Mit Maple geht das, ist aber ziemlich kompliziert.
Mit Mathematica geht es weitaus einfacher. Bin aber gerade zu faul das durchzuziehen.
Daher auch meine Anfrage ob es hierzu nicht auch einfachere Loesungen gibt.
So wie damals unter Dos. Da hat man einfach den Timer im PC ueber einen Interrupt fuer solche Zwecke missbraucht. Solche einfachen Dos Interrupt Routinen laufen unter meinem Windows Rechner aber leider nicht mehr.

Viel Glueck fuer deine Klausuren
Gruesse
 
Zuletzt bearbeitet:
Die Tatsache, dass man die logistische Gleichung für r=4 lösen kann, steht nicht im Widerspruch zum chaotischen Verhalten der Folge. Mehr will ich dazu nicht schreiben, bin auch kein Experte für dynamische Systeme.

Mir scheint deine Idee auf eine Waveshaping-Synthese hinauszulaufen. Dort werden gerne Polynome verwendet. Du willst spezielle Polynome vom Grad 2^n benutzen, wie sie bei der n-fachen Hintereinanderausführung der logistischen Abbildung entstehen. Da n ohnehin nicht sehr gross gewählt werden kann (bei dem exponentiell wachsenden Polynomgrad gibt es sonst schnell Probleme mit der begrenzten Bandbreite in einem zeitdiskreten System (Aliasing, Unschärferelation, Nyquist-Shannon-Abtasttheorem, …)), sollten sich diese noch gut auch ohne die analytische Lösung - also für jedes r in [0,4] - auswerten lassen.
 
Die Tatsache, dass man die logistische Gleichung für r=4 lösen kann, steht nicht im Widerspruch zum chaotischen Verhalten der Folge.
Das nicht. Aber doch in gewissem Widerspruch zu Erwartungshaltung. Jedenfalls geht es mir so. Dass man die Gleichung ausgerechnet fuer r=4 loesen kann haette ich nicht erwartet. Der tiefere Grund liegt in dem Zusammenhang arccos(2*x^2-1) = |2*arccos(x)|. Und der ist im Gegensatz zu ln(x^2)=2*ln(x) nicht gerade gelaeufig. Mir jedenfalls nicht. Stephen Wolfram schuttelt so etwas wohl aus dem Armel. Salopp kann man sagen, dass das Chaos aus einer fehlangepassten Abstastung eines FM Sinus basiert. Im Grunde ein aehnliches Prinzip wie die mod Funktion eines Pseudozufallgenerators.

Mir scheint deine Idee auf eine Waveshaping-Synthese hinauszulaufen.
Ja, genau. Allerdings rueckgekoppelt. Die Rueckkopplung, Iteration kann man jedoch als Verkettung betrachten und dann erhaelt man in der Tat nichts weiter als so ein Transferpolynom, dass man allerdings nicht extra berechnen muss. Und die anregende Funktion sind die Anfangswerte y=y0, eine Gerade, periodisch ein Saegezahn.
Die speichert man in einem Array. Iteriert sie nacheinander. Passt das Ergebnis etwas an ueber die Koordinatentransformation, einfach eine Abbildung und fertig.
Andere Anregungsfunktionen waeren u.U. auch interessant. Hab ich aber noch nicht ausprobiert.

Da n ohnehin nicht sehr gross gewählt werden kann (bei dem exponentiell wachsenden Polynomgrad gibt es sonst schnell Probleme mit der begrenzten Bandbreite in einem zeitdiskreten System (Aliasing, Unschärferelation, Nyquist-Shannon-Abtasttheorem, …)),
Genau, das ist der Haken an der Sache. Man kann leider fuer n, die Anzahl Iterationsschritte keine grossen Werte waehlen. Bei n=10 liegt der Grad des Polynoms schon bei 1024. Grob ueberschlagen muesste man hier schon mindestens 1024 Abtastwerte verwenden. Wobei das heutzutage ja ein Klacks ist. Bei 20 Schritten waere es schon ein Mb.
sollten sich diese noch gut auch ohne die analytische Lösung - also für jedes r in [0,4] - auswerten lassen.
So hatte ich mir das auch gedacht und mir zumindestens als Grafik mal angeschaut. Wie oben beschrieben einfach alle Anfangswerte [0..1] statt nur einem iteriert. Das erzeugt iterativ diese Polynome. Obwohl es nicht sachgemaess ist fuer alle r mit der Loesung von r=4 abgebildet um zumindestens die Frequenzmodulation zu besteitigen. Und das sah recht musikalisch aus. Fuer r=4 selbst erhaelt man dann einen Sinus. Mathematica kann Zahlentabellen als Audiosignal abspielen. Blos kenne ich mich in dem Programm nicht so gut aus. Gibt es noch etwas einfacheres ?
Eine einfache analoge Naeherung waere natuerlich cool.

Gruesse
 
Zuletzt bearbeitet:
Folgende Software-Ideen möchte ich gerne vorschlagesn:


1) Top40-Setlist-Maker. (Man gibt nur die Spieldauer an, und ob man auf einem Stadtfest oder einer Kirmes spielt, sowie die Uhrzeit.) Schon wird automatisch eine passende Setlist mit passenden Standardsounds generiert. (Auszug aus der Setlist: Summer of 69, Sweet Home Alabama, Knocking on Heavens-Door, Hold the line). Name der App: "0815/Top40"

2) JOB2Sound: Nach Auswahl der Berufsgruppe werden die Sounds spezifisch angepasst. Für den "sitzenden Bankkaufmann" gibt es schöne Orgeln ohne Leslie und Verzerrung und eine Standardfläche. Für dem Kampfhundstreichler mit Starallüren gibt es überall ordentlich Verzerrung und Schmutz drauf. Und für den tyischen Alleinunterhalter wird automatisch Local Controll auf "Off" gestellt.

3) Remove-Volume-Parkinson: Diese App eignet sich hervorragend für alle, die die Frontlautstärke von der Bühne perfekt einschätzen können und mit einer Hand immer am Volume regler sind, um die Gitarre zu übertrumpfen. Nur für Musiker-Board-Mitglieder konnte ich Einsicht in den Quellcode nehmen:
......
Compression = ON
Ratiio1 = 1:9999999999999999999999
Threshhold = -100DB
.......

An folgenden weiteren tollen Apps wird gerade entwickelt:
- Remove-Large-Church-Reverb from All SOUNDS
- Remove Gesichts-Günther from Stage
- Remove Lefthand-Bass-masturbation

:)
 
Bei Korg wird es "Remove all massif Delays from all Sounds" heissen. :)
Für den "sitzenden Bankkaufmann" gibt es schöne Orgeln ohne Leslie und Verzerrung und eine Standardfläche.
So etwas habe ich lange nicht mehr live gehoert. Immer nur bei Youtube. Wuerde mir gefallen.
Diese Standardflaechen gibt es aber nicht bei Hornbach oder ? Und warum nur eine ?
 
Kauf Dir eine Lowrey... die gibt's sicher sogar mit Sitzheizung. :rolleyes:
 
Jungs, die Drogen die ihr nehmt, kann man die auch über den Musik-Service beziehen? :eek:

Aber gerade dieser tiefere Einblick in die Materie der Physik als Grundlage der Musik verschafft einem ganz andere Erkenntnisse. Vergleichsweise habe ich mir jetzt mal zwei Seiten Suaheli reingezogen und das Ergebnis ist verblüffender Weise das gleiche......;)
 
Mal ganz anders gefragt, was haben wir denn an Resourcen da? Ich kann programmieren, habe mich aber vorher noch nie mit MIDI und VSTs beschäftigt.
Mein erstes Projekt in diese Richtung ist MIDI-P, damit möchte ich experimentieren und mir Stück für Stück neues Wissen aneignen. Sobald es anständig läuft, schaue ich mir das VST SDK an und werde mal schauen ob man MIDI-P als Plugin compilieren kann.

Aber hier gibt's ja noch mehr User die fit am PC sind. Wer hat denn noch eigene Projekte oder könnte sich sogar vorstellen, die hier genannte Dinge mal auszuprobieren / umzusetzen?
 
Programmieren ist in der Regel ersteinmal unabhängig von der verwendeten Sprache, Programmieren heißt für mich ein Problem zu analysieren, im Kopf in ein Modell zu überführen, die Probleme des Modells zu lösen und erst zum Schluß mit dem am besten für die Umsetzung geeigneten Werkzeug zu realisieren.

Aber wenn du so direkt fragst, ja ich hatte eine Vorlesung zu LISP. Ich arbeite allerdings nicht mit der Sprache und bin über akademische Beispiele nicht weit hinausgekommen. Ich finde das Konzept jedoch spannend und habe sogar mal einen eigenen kleinen Interpreter geschrieben. (Integriert in einen IRC Client, man hat ja sonst nichts zu tun...) :D
 

Anhänge

  • pnxm.png
    pnxm.png
    7,6 KB · Aufrufe: 173
Bezüglich LISP gibt es einen großen Vorteil, der auch für die Soundprogrammierung von Interesse sein KANN. Es wird prinzipiell nicht zwischen Variablen und Funktionen unterschieden. Das ermöglicht es, daß während der Laufzeit des Programms Funktionen umgeschrieben werden können. Das könnte für Soundprogrammierung bedeuten, daß man nach Bedienen z.B. eines MIDI-Controllers eine Funktion zur Tonerzeugung verändert.
Ich habe das ganze Prinzip aber auch nur oberflächlich gekratzt. :redface: Müßte ich mal tiefer drüber nachdenken.
 
Öhm...LISP hat ja diesen Unterschied defun vs setq...Du willst wohl Scheme programmieren...da gibt es nur define, um alles und jedes zu definieren... :)
 
Ich werfe auch mal ein paar Gedanken und Links in die Runde...

Ein grundsätzliches Problem bei der Sound- und Midiprogrammierung ist für mich, dass da noch viel zu viel plattformabhängig passiert. Da gibt es reihenweise Programme und Plugins, die nur unter Windows oder OS X funktionieren, von Linux mal ganz zu schweigen. Dabei gibt es eigentlich jede Menge Libraries[1], die das Entwickeln von plattformunabhängiger Software erleichtern. Leider viele davon aber nur für C oder C++, was m.E. nicht mehr zeitgemäß ist. Ich habe jedenfalls wenig Lust, mich mit solchen Dingen wie Speicherverwaltung und Pointern herumzuschlagen.

Ich bin ein Fan von Python, aber leider sieht es da bei der Audio- und MIDI-Unterstützung mehr als durchwachsen aus. Moderne Rechner sind schnell genug, um damit selbst Echtzeit-Audio-Bearbeitung zu machen, einen Synthesizer würde ich damit aber wohl nicht programmieren wollen.

Seit Version 1.9 bringt PyGame immerhin ein Python-Binding für PortMidi mit, so dass man dieses ganz einfach über die Installer für Windows oder Os X oder über das Linux-Paketsystem installieren kann. Ich habe damit vor ein paar Tagen relativ flott eine kleine MIDI SMF-Player-Library geschrieben, die ich noch etwas ausbauen und dann demnächst mal veröffentlichen will. Das schöne daran ist, dass man damit leicht Tempo und Controller-Daten beeinflussen kann und einzelne Kanäle oder Tracks an- und abschalten kann, die eingebetteten Textdaten asynchron an andere Funktionen oder Programme übergeben kann (z.B. zur Darstellung eingebetteter Lyrics o.ä.).

Ein weiteres interessantes musikalisches Python-Projekt ist Mingus.

Chris

[1] z.B. GUI-Libraries: Qt, wxWidgets, JUCE, Audio-Libraries: OpenAL, PortAudio u.a. und MIDI-Libraries: PortMidi (siehe PortAudio), RtMidi
 
Das Problem der plattformunabhängigkeit ist ja meistens nicht mit einer Programmiersprache gelöst, die Code erzeugt, der auf jeder Maschine läuft. Meistens sind einfach die Entwickler zu ignorant oder zu faul, darauf bei der Entwicklung zu achten. Nach dem Motto: ich benutze nur Windows, wer was anderes benutzt ist selbst schuld. Oder sie wollen halt die Vorteile der nativen APIs der Plattform nutzen, die ja oft spezielle Funktionen und Arbeitserleichterungen bieten, die es bei plattformunabhängigen Libraries nicht gibt oder die man erst selbst umständlich implementieren muss.

Ich bin, ehrlich gesagt, auch nicht so ein Freund von Java. Man muss einfach viel zu viel tippen, um die einfachsten Aufgaben zu erledigen. Böse Zungen sagen ja, Java sei ein Framework zur Erstellung von Frameworks ;) Immerhin gibt es für Java eine VST-Bridge, so dass man sogar VST-Plugins in Java implementieren kann. Aber mit VST ist das auch so eine Sache. Freie Software zu vertreiben, die das VST-SDK benutzt, ist aufgrund der Lizenzbedingungen eigentlich nicht möglich. Aber unter Windows kommt man ohne VST-Unterstützung nicht weit, vor allem weil durch das überkommende Treiber-Modell immer nur eine Applikation Zugriff auf das Audio-Interface oder die MIDI-Schnittstellen hat. Standalone Applikationen haben es da schwer, weil viele User, krass gesagt, zu blöd sind, Workarounds wie MIDI Yoke etc. einzurichten.

JPython heißt übrigens schon ewig Jython. Aber bring mal einem User bei, das alles zu installieren, bevor er deine Anwendung nutzen kann. Mit Python kann ich relativ leicht Stand-alone Binaries+Installer mit py2exe basteln. Aber Software-Installation und Abhängigkeiten unter Windows sind sowieso ein Thema für sich, bei dem ich mich stundenlang aufregen könnte. Auf einem Standardwindows ist ja außer dem Microsoftkram nichts vorhanden (Java, Python, Perl, gängige Libraries wie Qt oder GTK usw.). Dazu kommt noch, dass unter Windows die Tools zum Selbstkompilieren der Software meistens fehlen, man muss also dem Benutzer für alles Binaries bereitstellen, sonst steht er dumm da...

Chris
 
Mir fällt da mal Webstart ein...

Aber zu Windows kann ich eh nicht viel sagen, weil ich nur Linux nutze. Vermutlich wäre eine Live-CD die sinnvollste Option. Einschieben und neu starten. Dann kann es nur noch passieren, dass im Bios das Booten von CD deaktiviert ist.
 

Ähnliche Themen


Unser weiteres Online-Angebot:
Bassic.de · Deejayforum.de · Sequencer.de · Clavio.de · Guitarworld.de · Recording.de

Musiker-Board Logo
Zurück
Oben