Softwareideen

Kannte ich noch nicht, das ist eine schöne Zusammenfassung. Ich arbeite im Moment ebenfalls mit einer gewichteten Summe verschiedener Merkmale als Bewertungsfunktion, macht sich eigentlich ganz gut. Ein großes Problem stellt die Dimension der erzeugten Stücke dar. Eine Melodie mit 2 Takten ist machbar, aber ein schlüssiges Werk mit mehreren Stimmen und Sätzen? Hier muß meiner Meinung nach per Hand gelenkt und die äußere Form bestimmt werden. Allein die Entscheidung ob z.B. ein Thema überhaupt wiederholt wird, wie oft und an welcher Stelle - das muß von außen eingeschränkt werden.

Meine Idee wäre an dieser Stelle gewesen, einfach nur Übergänge zu bewerten. Wenn wir also an dieser Stelle mal in Takten reden (vielleicht wäre Patterns eine bessere Bezeichnung), dann hätte ich zunächst Takt 1+2 bewertet. Kommt da eine gute Bewertung raus, weiss man dass es quasi einen 'schönen' Übergang von Takt 1 auf 2 gibt. Danach Takt 2+3, um wiederum eine passende Kombination zu finden usw. Auf diese Art könnte man das Stück quasi beliebig lang machen.
 
Meine Versuche mit Mathlab

Du meintest wohl "MATLAB", oder?

Vielleicht waere es sinnvoll die Eigenschaften und Anwendungen der hier genannten Loesungen mal zusammenzustellen.
Also was kann man mit welchem Programm, Programmiersprache bezueglich Audio konkret anfangen. Was ist bei der Installation genau zu beachten e.t.c. Aehnlich wie bei dem Keyboard Kaufwunsch Fragebogen.

Als bekennender Fan von Python habe ich mich mal nach Tools für die mathematische Analyse und Verarbeitung von Audiosignalen in Python umgesehen und kann folgendes empfehlen:

NumPy / SciPy

Das NumPy-Paket für Python bildet die Grundlage für eine Sammlung an Paketen für wissenschaftliche Berechnungen, SciPy. NumPy stellt ein Array-Objekt zu Verfügung, mit dem sich Arrays, also Ansammlungen von Objekten gleichen Typs, mit beliebigen Dimensionen darstellen lassen. Transformations-Funktionen lassen sich auf das ganze Array anwenden, indem die Funktion auf jedes einzelne Elemente angewandt wird. Da dies alles in C implementiert ist, ist es auch sehr schnell. Schnell genug für etliche Wissenschaftler in großen Forschungseinrichtungen jedenfalls.

Solche Array sind für Audio-Daten wunderbar geeignet, den hier hat man es ja i.A. mit einer Folge von Samples, meist als Float-Zahlen zwischen -1 und +1 zu tun. Um NumPy-Arrays aus Audio-Daten zu erzeugen oder um Arrays in eine WAV-Datei o.ä. zu schreiben, gibt es das SciPy-Extensionpakat scikits.audiolab, das auf libsndfile basiert, also jede Menge Dateiformate, Samplingraten, Samplegrößen und Byteorders unterstützt. Aus patentrechtlichen Gründen liest und schreibt es aber leider keine MP3-Dateien, wohl aber Ogg Vorbis.

matplotlib

Um sich die Audio-Daten und sonstige Arrays auch schön mit Diagrammen darstellen zu lassen, gibt es das Paket matplotlib, das sich stark an MATLAB anlehnt. Auf der Webseite findet man eine Galerie mit hunderten Beispielen und ausführliche Dokumentation, um schnell zum ersten Plot zu kommen.

IPython

Eins der besten Features an Python ist m.E. der interaktive Modus. Damit kann man, wie auf der Shell, Statements und Ausdrücke interaktiv eingeben und bekommt gleich das Ergebnis angezeigt. Ideal, um Ideen auszuprobieren und Fehlern auf den Grund zu gehen. Einer der Hauptgründe, warum ich in Python meist ohne aufgeblasene GUI-IDE und Debugger auskomme (auch wenn es das natürlich alles gibt).

IPython mach die Python-Shell noch komfortabler, indem es automatische Code-Vervollständigung, interaktive Hilfe, Makros, Zugriff auf Shell-Befehle u.v.m. bietet. Das Beste ist aber, das NumPy/SciPy und matplotlib wunderbar in IPython integriert sind. Wenn man IPython mit der Option "-pylab" aufruft, werden alle Symbole von NumPy und matplotlib bereits importiert und ein extra Thread für die grafische Darstellung gestartet, so dass man Plots interaktiv darstellen und anpassen kann, ohne dass man eine eigene Event-Loop für die Grafikverarbeitung programmieren muss und den Python-Prompt immer zur Verfügung hat.

Der ganze Krempel lässt sich unter Debian/Ubuntu leicht mit folgenden Befehlen installieren:

Code:
sudo apt-get install python python-numpy python-matplotlib python-scipy \
    python-matplotlib python-ipython

(python-scipy ist optional)

Audiolab ist leider noch nicht in den Paketquellen verfügbar, das installiert & kompiliert man also am besten selbst:

Code:
sudo apt-get install python-dev python-setuptools libsndfile1-dev libasound2-dev
sudo easy_install scikits.audiolab

Eine weitere interessante SciPy-Extension ist scikits.samplerate, die das Ändern der Samplingrate von Sampledaten in hoher Qualität ermöglicht. Auch hier muss selbst kompiliert werden, was aber Dank Setuptools/easy_install kein Problem darstellt:

Code:
sudo apt-get install libsamplerate0-dev
sudo easy_install scikits.samplerate

Unter Windows muss man entsprechende Binary-Installer von den Webseiten der Projekte runter laden und installieren. Wichtig ist hier, dass man Python 2.x und nicht Python 3.0 verwenden sollte. [Update: so schnell können Informationen veralten: heute ist SciPY 0.9.0 rausgekommen, das nun auch Python 3 unterstützt. Hier gibt es Windows Binary-Installer.] Unter Mac OS X gilt das Gleiche oder man installiert alles über Paketmanager wie fink oder MacPorts.

finally:

Jetzt kann man das ganze ausprobieren: Shell öffnen und "ipython -pylab" (Return) eingeben. Man landet am python Prompt. Hier kann man sich mit "help(pylab)" erstmal die Hilfe zur NumPy/matplotlib-Umgebung anzeigen lassen. Als klitzekleines Beispiel hier mal die Erzeugung eines Plots einer Sinusschwingung aus 128 Samples:

Code:
# imports in ipython -pylab nicht notwendig, da automatisch beim Start erfolgt
from numpy import *
from matplotlib.pyplot import plot

# 128 Kreiswinkel in radians, linspace gibt ein Array mit 128 Werten zwischen
# 0 und 2 * pi zurück.  'pi' wird im numpy Paket definiert
a1 = linspace(0, 2 * pi, 128)

# Sinus-Funktion auf jedes Elemet des Arrays anwenden
a2 = sin(a1)

# Plot anzeigen, 'ro' = Darstellung der Werte mit roten Punkten
plot(a2, 'ro')

Das sieht dann so aus:

sinus.png

matplotlib unterstützt die Ausgabe mit mehreren GUI-Toolkits oder zahlreichen Dateiformaten. Näheres in der Dokumentation.
 
Zuletzt bearbeitet:
Hi Chris

Das von dir vorgestellte Programm klingt schonmal interessant. Werde ich nach Fasching ausprobieren. Erzeugt dieses dann Stand Alone Anwendungen ? Scheint aehnlich wie Matlab oder Exel. Nochmal zu meiner Aufgabenstellung :
Wandeln einer (auch laengeren) Tabelle von Zahlen in eine Wav oder mp3 (auch ogg) Datei. Moeglichst Freeware. Bei Matematk Lab :) gibt es hier Probleme mit der Maximallaenge der Arrays. Bei Maple nicht. Dafuer gibt es unter Maple 4 kaum Audio Funktionen. Ich habe letzendlich selber eine Wav Routine programmiert, besser zusammengestellt, die den File schreibt. Kann den Quelltext bei Bedarf gerne weitergeben. Fuer mich reicht Maple 4 im Grunde aus. So ein Programm soll Wellenformen erzeugen wie ich es mir vorstelle, Wie ich das dann zusammenstelle ist eine menschliche Aufgabe. Naja, der Gucci Chic Track gefaellt mir diesbezueglich nicht mehr so ganz. War eine spontane Idee :

Fuer den Wiki Eintrag muss ich hier soundso etwas anderes basteln. Chic ist zu altmodisch.
Das sollte aus einfachen duemmlichen Gruenden fuer WIKI futuristischer klingen.
Was meint ihr hier dazu ?

@Leef, all
Zum interessanten Thema der automatischen Erzeugung von Musikstuecken. Neuronale Netzwerke (Kohonen) und genetische, evolutionaere Algorithmen snd hier sicherlich denkbare Hilfsmittel. Fuer die Sprach oder Schrifterkennung sind z.B neuronale Netze hervorragend geeignet, aber das waere eine Anwendung im Sinne einer Analyse keiner Synthese. Fuer Sprachsynthese werden auch gerne KI Systeme verwendet. ELIZA war in den 80 ern ein sehr einfaches aber dennoch verblueffendes Beispiel dafuer. Das sollte im Grunde auch fuer Musik funktionieren. Z.B. in Form eines einfachen Musikdialogsystems.

Ich meine, dass man fuer eine Musiksynthese diese am besten als Sprache auffassen sollte.
Als Sprache kann man zunaechst allgemein formale Systeme verstehen. So waere auch eine Programmiersprache oder die Mathematik selbst eine Sprache. Nach meiner Auffassung geht dieser Sprachbegriff sogar noch weiter, so dass man alle Systeme, die sich z.b. evolutionaer entwickeln ueber eine Sprache verfuegen. Darueber koennte man eine spezielle Eigenschaft fuer die Musiksynthese ausnuetzen, die allen Sprachen gemeinsam ist. Das ist die bereits von mir erwaehnte Zipf oder Zeta oder Z-Verteilung. Diese ist auch fuer Elemente der Musik als Beurteilungskriteruim anwendbar :
http://sciencev1.orf.at/science/news/116198
Zumindest was melodische Phrasen im Deutschen Schlager angeht, bildest du damit sehr genau die Realität in den Charts ab
Wenn man den Link oben verfolgt, haben sich Mozart und insbesonders natuerlich Bach an strikte Regeln gehalten. Ich meine nicht dass dieser komplizierter sind als bei einem Schlager sondern lediglich umfangreicher, detaillierter. Ob Bach dann besser gefaellt als eine gute Tecno Produktion. Da bin ich persoenlich unschluessig.

Nochmal zureuck zur "Wort"sprache, Linguistik.
Hier koennte man zunaechst ohne Anspruch auf Vollstaendigkeit folgende bestimmende Faktoren nennen :

- Alphabet
- Phoneme und Regeln deren Anordnung
- Wortliste=Duden
- Grammatik = Regeln der Aneinanderreihung von Worten.
(- shannonscher Informationsgehalt)
- Sinngehalt=Bedeutung von Saetzen oder Aufsaetzen. (Auch von einzelnen Woertern)
- Resultierende Haeufigkeits-Statistiken aus diesen Regeln. Ursprung der Z-Verteilung ist die Linguistik.

Um eine Musiksynthesesystem zu programmieren sollte man sich zunaechst mit diesen Elementen der Linguistik als Analogon beschaeftigen und diese in die musikalische Variante uebersetzen. Kenntnisse in der Sprachsynthese sind natuerlich von Vorteil. Im Grunde eine recht ueberschaubare Aufgabenstellung. Zunaechst das schwierigste Thema (Das sich in der Musik eruebrigt) :

SINNGEHALT :

Harald schrieb:
Mein Bedenken ist lediglich, daß man damit letztlich immer die eigenen ästhetischen Vorstellungen reproduziert.
daybyter schrieb:
Ich sehe auch grosse, gewaltige Probleme damit, Regeln für 'schöne' Melodien/Musik aufzustellen.
Strogon schrieb:
Wir haben es hier also mit einem ästhetischen Kriterium zu tun.
Sehr schoen, dass sich hier alle einig sind. Ausser dass wohl jeder eine andere Vorstellung von Aesthetik, Schoenheit hat. Entspricht die Aesthetik eines Musikstueckes einem Sinngehalt wie: "Diese Toilette ist defekt" ? Ich meine dieser Sinngehalt ist wie in den Zitaten oben erwaehnt fuer jeden verschieden. Musik ist hier anders als Wortsprache. Es gibt keinen objektiven Sinngehalt. Damit ein subjektiver Sinngehalt erzeugt werden kann, muessen jedoch Kriterien einer einfacheren Stufe erfuellt sein. Das waere die musikalische Grammatik.


MUSIKALISCHE GRAMMATIK
Harald meinte dazu :
Harald schrieb:
So ein Ansatz erscheint mir eigentlich etwas plausibler, denn viele Musik folgt sehr strengen tonsetzerischen Regeln, insbesondere Popularmusik.
So sehe ich dies in etwa auch. Damit entfaellt der Aspekt eines "Singehaltes". Den schafft sich in der Musik jeder selbst. Notwendige Voraussetzung dafuer ist die Einhaltung grammatischer musikalischer Regeln.
In der Musik ist (heutzutage) erlaubt, was gefällt.
Keinesfalls
Anders als beim Schach gibt es in der Musik halt kein "richtig" oder "falsch" (letzteres vielleicht noch am ehesten)
Grammatische Regeln sind recht objektiv. So gesehen gibt es vor allem auch ein "falsch". Wie in Klammern von Chris sehr gut bemerkt.
"Der E10 ist erheblich mit Biotreibstoffes der Benzinpreis gestiegen des Einfuehrung"
Dieser Satz ist unverstaendlich weil er keinen grammatischen Regeln entspricht. Allerdings kann man erahnen um was es geht. Er unterscheidet sich von einer voellig sinnlosen Aneinanderreihung von Worten, da er die Permutation eines sinnvollen Satzes darstellt. "Tonsetzerische Regeln" versuchen solch eine musikalische Grammatik zu erfassen. Wie weit man hier heute ist weiss ich nicht. Es ist aber moeglich wenigstens auf einfachem Wege Ergebnisse zu beurteilen. Hier kommt nun die Z-Verteilung ins Spiel. In jeder Wortsprache wird ein laengerer Text eine Buchstaben und Wortverteilung gemaess der Z-Verteilung aufweisen. Warum dies genau so ist weiss man bis heute nicht. Vermutlich stellt die Z- Verteilung fuer evolutionaer entwickelte Systeme eine besonders effiziente Verteilung dar. Der (statistisch zu kurze) Text "Der E10 ist erheblich mit Biotreibstoffes ..." stellt einen permutierten Ausschnitt einer Z-verteilten regulaeren Sprache dar. Er ist grammatisch voellig falsch.( dennoch versteht man den Text in etwa ). Man kann nicht sagen, dass eine Z-verteilte Wortverteilung in jedem Fall sinnvollte Texte ergibt. Aber mit Sicherheit kann man behaupten, dass ein sinnvoller laengerer Text stets eine Z-verteilte Worthaeufigkeit ergibt.

Die Z-Verteilung ist somit kein hinreichendes Kriterium fuer aesthetische musikalische Grammatik aber wie in Wortsprachen ein notwendiges !

@Leef
Und daher klingt dein erzeugtes Musikstueck zwar erstaunlich harmonisch, aber es enthaelt keinerlei musikalische, sprachliche Struktur. Weil es keinerlei Z-Verteilung enthaelt. Das hoert man sofort.
 
Zuletzt bearbeitet:
Das von dir vorgestellte Programm klingt schonmal interessant. Werde ich nach Fasching ausprobieren. Erzeugt dieses dann Stand Alone Anwendungen ? Scheint aehnlich wie Matlab oder Exel.

Es handelt sich hier nicht um ein einzelnes Programm, sondern um Bibliotheken für die Programmiersprache Python. Python ist eine Allzweck-Programmiersprache und kann durch sogenannte Module (Dateien mit Library-Code) und Pakete (Zusammenfassung von Modulen) erweitert werden. NumPy/SciPy ist eine Sammlung von Paketen für technisch-wissenschaftliche Berechnungen.

Python ist eine interpretierte Sprache, d.h. Python-Skripte werden direkt vom Python-Interpreter ausgeführt, ohne Kompilierung (der Interpreter übersetzt zwar den Source-Code intern in Byte-Code, der dann in der Python-Virtuellen Maschine ausgeführt wird (ähnlich wie bei Java), aber das passiert automatisch und der Byte-Code ist ohne Python-Interpreter nicht ausführbar). Man muss also i.A. Python installiert haben, um Python-Skripte laufen zu lassen, und auch alle vom Programm benutzen Module und Pakete. Aber ein richtig geschriebenes Python-Skript ist dafür i.d.R. ohne Änderungen auf allen Plattformen lauffähig, auf denen eine vollständige Python-Installation vorhanden ist.

Es gibt allerdings die Möglichkeit, den Python-Interpreter (in Form einer Shared Library) und alle benötigten Module in einem Executable zusammenzufassen, das dann ohne vorige Python-Installation funktioniert. Dazu gibt es das Paket py2exe. Am Namen sieht man schon, dass das hauptsächlich für Windows gedacht ist, denn anderswo ist Python sowieso meist schon installiert und um die Installation von Abhängigkeiten kümmert sich ein Paketmanager. So ein Standalone-Executable wird natürlich vergleichsweise groß, aber heutzutage sind Downloadgrößen im zweistelligen Megabyte-Bereich ja kein Beinbruch mehr. Mehr Speicher verbraucht das Programm normalerweise dadurch nicht (u.U. schon, aber das ginge jetzt zu sehr ins Detail).

Die Ähnlichkeit zu Matlab ist bei matplotlib beabsichtigt und NumPy ist ursprl. auch als Alternative zu kommerzieller Software für wissenschaftliches Rechnen entstanden. Man versucht aber natürlich, sich auch nach den Gepflogenheiten der Python-Welt zu richten, d.h. der Code soll für "normalen" Python-Programmierer intuitiv verständlich und elegant sein aber auch für Wissenschaftler, die sich normalerweise Programmieren zum großen Teil selbst beibringen, leicht erlernbar sein.

Mit Excel hat das ganz eher wenig zu tun, außer dass es bei wissenschaftlichen Berechnungen auch oft um Daten geht, die in Reigen und Spalten organisiert sind und dass man mit Excel auch Diagramme basteln kann. ;) Aber, wie gesagt, es handelt sich nicht um ein Programm, mit einer bestimmten grafischen Benutzeroberfläche. sondern um eine Programmiersprache. Wie du den Code eingibst, testest, debuggst, ausführst und verteilst, bleibt dir selbst überlassen, d.h. im Grunde reicht die Shell und ein Texteditior.

Arrays in WAV-Dateien schreiben, ist, wie bereits erwähnt, mit dem scikits.audiolab Paket kein Problem.

Chris
 

Ähnliche Themen


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

Musiker-Board Logo
Zurück
Oben