Frage von Zuroll, 67

In welcher Programmiersprache könnte ich am besten ein Programm schreiben, welches sich sozusagen selber Melodien ausdenkt?

Ich möchte für einen Wettbewerb ein Programm schreiben, dass Melodien selbständig komponiert. Welche Sprache eignet sich dazu? (Bitte nicht Java) Und bitte keine Kommentare wie: "Das ist viel zu schwierig" Ich plane, es mit ein paar Harmonierlehre-Regeln zu bestücken. Per Zufallzahl werden dann geeignete Noten errechnet.

Expertenantwort
von TeeTier, Community-Experte für programmieren, 25

Wenn es dir nur um die Programmierung von Melodien geht, dann nimm Python. Diese Sprache kannst du selbst als Anfänger innerhalb von nur einer Woche ausreichend lernen, um dein Vorhaben zu realisieren.

An deiner Stelle würde ich die Melodie in Textform generieren, und zwar im Format eines gängigen Konsolen-Notensatz-Programms wie Lilypond. Suche dazu einfach bei Google nach dem Aufbau des Formats und schreibe dein Python-Skript so, dass es diese einfachen Textdateien generiert.

Im Anschluss kannst du die generierte Melodie über die Kommandozeile aus deinem Skript heraus als PDF zum drucken exportieren, und eine MIDI-Datei erzeugen, um dir die Melodie auch anzuhören.

Ein Skript zum generieren von zufälligen Melodien und dem Konvertieren in PDF und MIDI wird nicht größer als 40 bis 50 Zeilen sein.

Wenn du hingegen Harmonieregeln einbauen willst, gibts nach oben kein Ende. Aber ich schätze mit 150 bis 200 Zeilen kannst du schon etwas Ordentliches machen. :)

Viel Spaß! :)

Kommentar von procoder42 ,

Wenn du hingegen Harmonieregeln einbauen willst, gibts nach oben kein Ende.

Die gängigen Pentationiken (und Arpeggios) sollten ausreichen, alles weitere macht das Programm unübersichtlich.

Ein Problem das hier noch gar nicht angesprochen wurde :

Taktart und Rhythmik. Soll das Programm immer Melodien im 4/4 Takt erzeugen ? Wäre am Einfachsten, aber würde eben auch einschränken. Und die verschiedenen Notenlängen umzusetzen wird für Anfänger auch kein Spaß (Vor allem wenn noch punktierte Noten dazu kommen). Dazu sollte man am besten jedem Notentyp eine Länge (Ganz = 4; Halb = 2; Viertel = 1; Achtel = 0,5; ...) zuweisen und dann zufällig auswähen, bis die Summe gleich 4 ist.

Kommentar von TeeTier ,

Naja gut, man könnte jetzt auch noch Triolen und Pausen mit berücksichtigen, was wirklich nur ein paar Zeilen mehr sind, wenn man die Hauptarbeit tatsächlich an Lilypond weiter delegiert, aber wir wollen mal nicht übertreiben. :)

Meiner Erfahrung nach hören sich Computergenerierte Melodien in den meisten Fällen eher mäßig an. Man muss schon verdammt viele davon generieren, um auf eine einzige zu stoßen, die halbwegs akzeptabel klingt. :)

Kommentar von Franz1957 ,

Weiß man denn, durch welche formalen Eigenschaften Melodien, die sich gut anhören, sich von den anderen unterscheiden?

Kommentar von TeeTier ,

Genau das ist ja der Punkt: Es gibt unendlich viele "Regeln" der Harmonielehre, des Arrangierens oder entfernter auch der Instrumentenkunde, des Improvisierens und der Programmierung von Synthesizern.

ABER: Die wenigsten Melodien, die sich strikt daran halten, hören sich auch wirklich gut an. Und nicht nur das: Von Laien geschriebene Stücke, die gegen jegliche Formalitäten "verstoßen" und sofort von jedem Algorithmus aussortiert würden, klingen für Menschen oftmals richtig gut und haben Ohrwurm-Charakter.

Hinzu kommt noch das große Gebiet der Psychoakustik. Es ist relativ schwer, die Lautstärke zweier Instrumente per Software automatisiert anzupassen. Allein schon bei gleicher Amplitude und gleicher Frequenz hört sich ein Rechteck viel viel lauter an, als eine Sinusform. Stichwort "Gehörrichtige Lautstärke" oder einfach "Equal Loudness Contour".

Und wenn man die Lautstärke eines Pianos und einer Oboe bei leisem spielen angepasst hat, kann man beide nicht linear hochskalieren und darauf hoffen, dass beide auch die gleich Laut klingen, wenn man sie doppelt so laut abspielt.

Dann gibt es noch so schöne Themen wie die "Blauertschen Bänder", mit deren Hilfe man Audio-Aufnahmen mehr oder weniger im virtuellen Raum "positionieren" kann, wobei eine Kunstkopfaufnahme IMMER viel besser und realistischer klingen wird, selbst mit stark rauschenden Kondensatorkapseln.

Es gibt noch unzählige weitere Themen, und KEIN EINZIGES davon ist komplett erforscht! Es sind immer nur grobe Näherungswerte, nach denen man sich richten kann. Das gilt wohlgemerkt für die Synthese von Instrumenten, Stücken oder einfach nur Melodien. Bei der herkömmlichen Harmonielehre sieht die Situation schon viel besser aus, aber immernoch dürfte der größte Teil "erraten", "gemessen" oder "vermutet" sein.

Musik entsteht im Kopf, und lässt sich nicht Mathematisch erfassen. Und wenn, dann nur in groben Grundzügen. Das ist ja gerade das gemeine daran. :)

Kommentar von Franz1957 ,

Danke für diese Antwort! Spannendes Gebiet. Mich überrascht, wie viel es hier zu erforschen gibt. Idee: Mit Crowdsourcing bekäme man zumindest Versuchspersonen und Daten zum analysieren. Ob es allerdings gelänge, darin aussagekräftige Muster zu finden, wage ich nicht zu vermuten. (Ich habe eine Zeitlang bei galaxyzoo.org mitgemacht. Dort klassifizieren die Teilnehmer kosmische Objekte auf Teleskopaufnehmen. Das machte Spaß und ich half z.B. herauszufinden, daß es mehr Galaxien mit drei Spiralarmen gibt, als man angenommen hatte. Inzwischen gibt es weitere ähnliche Projekte, siehe zooniverse.org.)

Antwort
von Berny96, 32

Eigentlich eignet sich jede Sprache gleich gut dafür. Was du aber wahrscheinlich noch nicht wusstest ist das es viele Sprachen gibt die GENAU dafür gemacht worden sind. Einfach mal googlen. Ob es denn wirklich praktisch ist dein Ziel damit umzusetzen weiss ich leider nicht weil ich noch keine Erfahrungen damit gesammelt habe aber wenn ich dir eine Sprache empfehlen müsste wäre diese C# da ich es selber verwende und das damit auch nicht all zu schwer sein dürfte. Viel Glück dir! :)

Antwort
von Gomze, 24

Denke C+ wäre ganz gut dafür

Kommentar von Zuroll ,

Meinst du C oder C++ ? C+ gibt es nicht

Expertenantwort
von TeeTier, Community-Experte für programmieren, 16

Sorry, dass ich nochmal antworte, aber könntest du mir evtl. sagen, ob es bei diesem Wettbewerb ausschließlich um die Entwicklung eines "Melodiengenerators" geht, oder handelt es sich um einen allgemeinen Programmierwettbewerb, für den du dir dieses Projekt ausgedacht hast?

Hat dein Wettbewerb auch eine Website? Keine Angst, ich mach da nicht mit und dir damit keine unnötige Konkurrenz! Ich finde es nur interessant, dass es zu diesem Thema gleich einen ganzen Wettbewerb gibt. Oder habe ich da etwas falsch verstanden?

Wäre schön, wenn du in einem Kommentar nochmal kurz antworten könntest!

Auf jeden Fall viel Erfolg! :)

Kommentar von Zuroll ,

Jugend Forscht, also geht alles mögliche

Kommentar von Zuroll ,

Ich bin bei der Vorstufe vom Wettbewerb, Schüler experimentieren auf Landesebene gekommen, aber da habe ich etw. mit Technik gemacht. Nich so mein Ding. Hat sich herausgestellt.

Kommentar von TeeTier ,

OK, danke für die Antwort und viel Erfolg dabei! Finde ich sehr gut, dass du bei so etwas mitmachst.

Lass dich bitte nicht von meinem Kommentar oben demotivieren, in dem ich schreibe, dass es "schwer" ist, und sich computer-generierte Melodien meist nicht gut anhören.

Ich habe als Schüler mal ein Skript geschrieben, welches ohne jegliche Beachtung der Harmonielehre, eine völlig zufällige Melodie generiert. Zu diesem Zeitpunkt hatte ich die Notwendigkeit von Pausen völlig unterschätzt, und dementsprechend klangen die generierten Melodien dann auch.

ABER: Trotzdem waren einige davon gar nicht mal sooo schlecht!

Wenn du beachtest, dass eine Melodie nicht nur aus Noten, sondern auch aus Pausen besteht, und evtl. noch Achtel, Viertel, Halbe und Ganze mit einbaust, bin ich mir sicher, dass die ein oder andere Melodie recht akzeptabel klingen wird!

Und wie gesagt, ich mach dir da keine Konkurrenz ... bin ca. doppelt so alt, als es das Maximalalter dafür vorschreibt. :)

Viel Erfolg! :)

Antwort
von Franz1957, 16
Kommentar von Franz1957 ,
Kommentar von TeeTier ,

Ich habe mir absichtlich verkniffen, die genannten in meiner Antwort zu erwähnen, da es bei dem Wettbewerb ja sicher darum geht, wirklich etwas eigenes zu entwickeln. Aber im Nachhinein denke ich, da ich sowieso Lilypond erwähnt habe, ist deine Antwort ja auch OK.

Allerdings ist meine Erfahrung mit "Chuck", "Pure Data" und "Super Collider" eher die, dass es sich nicht gut zum automatischen Erstellen von Melodien eignet. Klangsynthese ist eben etwas anderes als eine Komposition. :)

Antwort
von Powermax1990, 38

Also programmieren musst du da eigentlich nicht. Es gibt Profisoftware, welche eine große Anzahl an Musikinstrumenten inkludiert haben womit man z.B. auch einige Soundtracks von Filmen machen kann - bei einem wirklichen Pro hört man den Unterschied (im Film dann) kaum ob Orchester oder Prodktionsstudio.

Programm fällt mir gerade nur eines von Adobe ein, aber ohne Namen.

Kommentar von Berny96 ,

Der Fragesteller will doch ein Programm schreiben was selbst Melodien komponiert. Dafür gibt es keine vorgeschriebene Software.

Kommentar von Garfield0001 ,

na ohne eine Software kannst du wiederum fast keine Software schreiben ;-)

Kommentar von Berny96 ,

Das ist wohl wahr. :D

Keine passende Antwort gefunden?

Fragen Sie die Community