Und da sind wir wieder, meine Damen und Herren!
Im letzten Wochenrückblick habe ich völlig ignoriert, dass meine eigentliche Aufgabe war, dafür zu sorgen, dass die PDF-Ausgabe meines Programms wieder ordentlich ist. Dieses Problem habe ich erfolgreich in der letzten Woche weiterhin ignoriert. Aktuell bin ich ja noch in einer relativ frühen Phase der Entwicklung meines Programms, weshalb ich die Freiheit genieße, an verschiedenen Fronten zu bauen. Ebensowenig habe ich mir mal Java Swing angesehen, um die Oberfläche endlich schön zu gestalten.
Stattdessen habe ich eine neue Baustelle angefangen. In diesem Falle ist es eine Baustelle im musikalischen Bereich.
Wie unschwer zu erkennen ist, bin ich eher sprunghaft als gradlinig, was die Entwicklung meiner Programme angeht, aber das wird sich im Programmierverlauf ändern. Es ist keinesfalls ein Zeichen einer schnell eintretenden Motivationslosigkeit sondern viel mehr ein Indiz dafür, dass ich an vielen Stellen neue Motivation vernehmen kann.
Kommen wir zu meiner Baustelle, welche im Titel dieses Posts ja schon leicht angedeutet wurde. Denn Hurra: Ich habe angefangen, dem Promponator Moll beizubringen. Warum nur angefangen? - Klar, weil es noch nicht fertig ist. Aber warum ist es noch nicht fertig? Diese Frage ist für die Musiktheoretiker unter euch leicht zu beantworten (oder eben auch nicht), für alle anderen hier kurz angerissen: Die Dominantfunktionen in einer Mollkadenz stehen in Dur. Warum? Weil alles andere scheiße klingt. Nun ist es meine Aufgabe noch, dem Promponator beizubringen, wann er die entsprechenden Versetzungszeichen zu setzen hat und wann nicht. Leicht vielleicht - vielleicht aber auch nicht. Das wird sich zeigen.
Das Ergebnis dieses Projektes werdet ihr hoffentlich im nächsten Wochenrückblick begutachten können, vorausgesetzt, dass ich keine neue Baustelle anfange.
Bis dahin wünsche ich euch eine gute Woche,
Schmuel
(Un)berechenbar ist die Musik
Samstag, 20. August 2016
Samstag, 23. Juli 2016
AWT ist älter als ich | Wochenrückblick 3
Hallo,
An dieser Stelle sei nur kurz angemerkt, woran ich im Moment arbeite.
Ich muss meiner Schande gestehen, dass ich seit Jahren noch mit Java AWT (Abstract Window Toolkit) arbeite, welches inzwischen jedoch leicht veraltet ist. Um es direkt zu sagen: Es ist älter als ich. Heutzutage arbeitet man mit Swing - Nicht nur ein wunderbares Mittel in der Musik sondern offenbar auch ein Weg, um eine Grafische Oberfläche (GUI) in Java zu bauen.
Ich möchte dem späteren Nutzer die Möglichkeit geben ein paar Einstellungen vorzunehmen was die Art der ausgegebenen Musik angeht. Also dachte ich mir: Wenn, dann richtig. Und so beginne ich mit dem erlernen von Java Swing.
Nebenher habe ich das Problem mit der PDF ausgabe noch immer nicht lösen können, steht aber noch auf meiner To-Do liste also wird das auch noch gelöst. Ich habe inzwischen meiner Registrierung im Lillypond Forum abgeschlossen, und werde dort bald nach Hilfe fragen.
Bis dahin wünsche ich euch ein schönes Wochenende,
Samuel Winkler
An dieser Stelle sei nur kurz angemerkt, woran ich im Moment arbeite.
Ich muss meiner Schande gestehen, dass ich seit Jahren noch mit Java AWT (Abstract Window Toolkit) arbeite, welches inzwischen jedoch leicht veraltet ist. Um es direkt zu sagen: Es ist älter als ich. Heutzutage arbeitet man mit Swing - Nicht nur ein wunderbares Mittel in der Musik sondern offenbar auch ein Weg, um eine Grafische Oberfläche (GUI) in Java zu bauen.
Ich möchte dem späteren Nutzer die Möglichkeit geben ein paar Einstellungen vorzunehmen was die Art der ausgegebenen Musik angeht. Also dachte ich mir: Wenn, dann richtig. Und so beginne ich mit dem erlernen von Java Swing.
Nebenher habe ich das Problem mit der PDF ausgabe noch immer nicht lösen können, steht aber noch auf meiner To-Do liste also wird das auch noch gelöst. Ich habe inzwischen meiner Registrierung im Lillypond Forum abgeschlossen, und werde dort bald nach Hilfe fragen.
Bis dahin wünsche ich euch ein schönes Wochenende,
Samuel Winkler
Samstag, 16. Juli 2016
Doch nicht tot! | Wochenrückblibk 2
Hallo an alle da draußen, die mich nicht aufgegeben haben,
Hallo an alle da draußen, die mir den Kopf abreißen wollten, weil ich mich Ewigkeiten nicht gemeldet habe,
Hallo an alle da draußen, die sich verlaufen haben: Hier geht es zurück zu einer Suchmaschine.
Ich habe mich also ziemlich lange nichtmehr um das Projekt gekümmert. Das letzte mal Anfang Mai - jetzt ist es Mitte Juli. Das gute daran ist, dass ich daraus gelernt habe, dass mir so ein Loch besser nie, nie wieder passieren darf. Denn wenn ich einmal meinen Code längere Zeit loslasse, ist es sehr schwer für mich, sich da wieder reinzufinden.
Ein großes Glück also, dass ich tatsächlich auf vollkommen realer Basis mal Kommentarzeilen verwendet habe, die haben mein Leben gerettet, jedenfalls konnte ich so meine Arbeit in den letzten Tagen erstaunlich zügig wieder aufnehmen. Und: Es hat sich gelohnt. Ich habe nun viele, viele Stunden gebastelt und die ein oder andere For-Schleife entworfen. Das Resultat:
Der Promponator erstellt nun Wahnsinns-Rythmen, die für unglaubliche Abwechslung sorgen (Da merkt man fast garnicht mehr, wie es von Quintparallelen und Terzverdopplungen nur so wimmelt [PS: wenn euch eure Psyche noch was Wert ist, schaut euch nicht die Terzbass-funktionen an. Ich garantiere für nichts])
Die tatsächliche Herausforderung und auch das Ziel dieser Woche bestand darin, einen sehr variablen Rythmus zu schaffen, der trotzdem halbwegs richtige Töne in den richtigen Funktionen ausspuckt. Momentan hat jeder Takt eine Funktion, und darin wimmeln dann in den Melodiestimmen (in dem Fall Sopran, Alt und Tenor; der Bass hat lediglich die Grundtöne der Funktionen) die Töne des entsprechenden Dreiklangs. Im Moment noch absolut Random. Aber: Es sind nie zu viele oder zu wenig Töne in den Funktionen drin. Meistens. Und so entsteht ein akzeptables Gesamtbild.
Ich habe dafür eine doppelte For-Schleife folgendermaßen verwendet:
int index = 0;
for(int i = 0; i<AnzahlHarmonien; i++){
for(int j = 0; j<TöneProHarmonie; j++){
double rdm_rythm = Math.random();
int rythm;
if(rdm_rythm < 0.25 && j<maxTunes-8){
rythm = 4;
j += 8;
}else if(rdm_rythm < 0.5 && j<maxTunes-4){
rythm = 8;
j += 4;
}else if(rdm_rythm < 0.75 && j<maxTunes-2){
rythm = 16;
j += 2;
}else{
rythm = 32;
}
}
index++;
}
Anschließend wurde der integer rythm an den String der Note angehängt, sodass er von Lilypond syntaktisch verwendet werden konnte.
Der Fortschritt der Woche lässt sich also durchaus sehen und wird mit einer neuen Version vermerkt.
Bis denne,
Samuel Winkler
Edit: Das Bild 'Nachher' ist das Resultat der Einbindung der .midi Datei in nted. Aktuell gibt es noch Schwierigkeiten was die native Ausgabe als .pdf angeht. Das ist unter anderem mein Ziel für die Version 2.5
Hallo an alle da draußen, die mir den Kopf abreißen wollten, weil ich mich Ewigkeiten nicht gemeldet habe,
Hallo an alle da draußen, die sich verlaufen haben: Hier geht es zurück zu einer Suchmaschine.
Ich habe mich also ziemlich lange nichtmehr um das Projekt gekümmert. Das letzte mal Anfang Mai - jetzt ist es Mitte Juli. Das gute daran ist, dass ich daraus gelernt habe, dass mir so ein Loch besser nie, nie wieder passieren darf. Denn wenn ich einmal meinen Code längere Zeit loslasse, ist es sehr schwer für mich, sich da wieder reinzufinden.
Ein großes Glück also, dass ich tatsächlich auf vollkommen realer Basis mal Kommentarzeilen verwendet habe, die haben mein Leben gerettet, jedenfalls konnte ich so meine Arbeit in den letzten Tagen erstaunlich zügig wieder aufnehmen. Und: Es hat sich gelohnt. Ich habe nun viele, viele Stunden gebastelt und die ein oder andere For-Schleife entworfen. Das Resultat:
Der Promponator erstellt nun Wahnsinns-Rythmen, die für unglaubliche Abwechslung sorgen (Da merkt man fast garnicht mehr, wie es von Quintparallelen und Terzverdopplungen nur so wimmelt [PS: wenn euch eure Psyche noch was Wert ist, schaut euch nicht die Terzbass-funktionen an. Ich garantiere für nichts])
Die tatsächliche Herausforderung und auch das Ziel dieser Woche bestand darin, einen sehr variablen Rythmus zu schaffen, der trotzdem halbwegs richtige Töne in den richtigen Funktionen ausspuckt. Momentan hat jeder Takt eine Funktion, und darin wimmeln dann in den Melodiestimmen (in dem Fall Sopran, Alt und Tenor; der Bass hat lediglich die Grundtöne der Funktionen) die Töne des entsprechenden Dreiklangs. Im Moment noch absolut Random. Aber: Es sind nie zu viele oder zu wenig Töne in den Funktionen drin. Meistens. Und so entsteht ein akzeptables Gesamtbild.
Ich habe dafür eine doppelte For-Schleife folgendermaßen verwendet:
int index = 0;
for(int i = 0; i<AnzahlHarmonien; i++){
for(int j = 0; j<TöneProHarmonie; j++){
double rdm_rythm = Math.random();
int rythm;
if(rdm_rythm < 0.25 && j<maxTunes-8){
rythm = 4;
j += 8;
}else if(rdm_rythm < 0.5 && j<maxTunes-4){
rythm = 8;
j += 4;
}else if(rdm_rythm < 0.75 && j<maxTunes-2){
rythm = 16;
j += 2;
}else{
rythm = 32;
}
}
index++;
}
Anschließend wurde der integer rythm an den String der Note angehängt, sodass er von Lilypond syntaktisch verwendet werden konnte.
Der Fortschritt der Woche lässt sich also durchaus sehen und wird mit einer neuen Version vermerkt.
![]() |
| Vorher |
![]() |
| Mittendrin |
![]() |
| Nachher |
Bis denne,
Samuel Winkler
Edit: Das Bild 'Nachher' ist das Resultat der Einbindung der .midi Datei in nted. Aktuell gibt es noch Schwierigkeiten was die native Ausgabe als .pdf angeht. Das ist unter anderem mein Ziel für die Version 2.5
Freitag, 6. Mai 2016
Jeder auf seine (Ton)art | Rückblick 1
Hallo alle zusammen.
Ich habe mich entschieden, jetzt einfach mit der Indexierung der Rückblicke nochmal bei 1 anzufangen. Dieser Index bezeichnet von nun an die Wochenrückblicke seit diesem Post.
Da nun die Ferien so richtig anfangen kann ich mehr Zeit in dieses Projekt investieren, was ich freilich auch tun werde. Der Erfolg der letzten Woche war also eher weniger groß, aber jeder Erfolg ist nennenswert und lässt mich nach vorn blicken. Der Promponator ist nun in der Lage jede beliebige Tonart generieren kann. Da swar aus dieser Sicht keine große Herausforderung für mich, denn Lilypond liefert dafür bereits eine vordefinierte Methode.
Wie bereits gesagt war die letzte Woche nicht sehr produktiv, aber ich bin mir sicher dass sich das bereits in den nächsten Tagen ändern können wird.
Es wird zu diesem Post vorerst keine neue Version geben.
Ich habe mich entschieden, jetzt einfach mit der Indexierung der Rückblicke nochmal bei 1 anzufangen. Dieser Index bezeichnet von nun an die Wochenrückblicke seit diesem Post.
Da nun die Ferien so richtig anfangen kann ich mehr Zeit in dieses Projekt investieren, was ich freilich auch tun werde. Der Erfolg der letzten Woche war also eher weniger groß, aber jeder Erfolg ist nennenswert und lässt mich nach vorn blicken. Der Promponator ist nun in der Lage jede beliebige Tonart generieren kann. Da swar aus dieser Sicht keine große Herausforderung für mich, denn Lilypond liefert dafür bereits eine vordefinierte Methode.
Wie bereits gesagt war die letzte Woche nicht sehr produktiv, aber ich bin mir sicher dass sich das bereits in den nächsten Tagen ändern können wird.
Es wird zu diesem Post vorerst keine neue Version geben.
Samstag, 23. April 2016
Lilypond! - Neuer Generator! - Erste ergebnisse! | Tage 7-20
Hallo alle zusammen!
Ich möchte vorab bemerken, dass ich von nun an regelmäßig voraussichtlich jedes Wochenende eine Art Wochenrückblick verfasse. Dadurch soll vordergründig die unnötige Verwirrung beseitigt werden, welche immer wieder entsteht wenn ich den Titel eines neuen Postings verfasse.
In der letzten Zeit ist jedenfalls vieles passiert von dem ich sagen würde, dass es eine Erzählung wert ist.
Fangen wir damit an, dass ich allein in der Zeit dieser wenigen Wochen die Klasse des Generators zwei mal komplett umgestoßen und neu errichtet habe. Ich habe mich inzwischen darauf eingestellt, dass dies weiterhin noch mehrmals geschehen wird, aber das gehört eben zum Prozess dazu. Meine bisherigen Erfahrungen, die ich in der Spieleentwicklung hatte, fielen eher so aus, dass ich eine Klasse noch nie komplett gelöscht habe, um die Funktion zu rekonstruieren. Es hatte bereits diese Dimension erreicht, dass allein schon das Löschen einer Schleife mit herben inneren Konflikten verbunden war.
Doch nun habe ich die Möglichkeiten entdeckt, die sich mir durch Backup-Dateien beten. Folglich sind meine Hemmungen, etwas produktiv umzustoßen eher gering.
Einer der Gründe für den Umstoß des Generators stellt eine wunderbare Neuerung dar. Ich habe ein Programm gefunden, welches die Möglichkeit eröffnet aus Textwerten eine Notenpartitur und eine MIDI datei zu erzeugen. Das bedeutet, dass ich nun selbst nicht weiter darauf angewiesen bin einen Interpreter zu programmieren geschweigedenn eine Grafische Darstellung des Notentextes auszugeben.
Nun kann ich mich wiederum gänzlich auf den Generator konzentrieren was letzten Endes dafür sorgen wird, dass selbiger weitaus komplexere Funktionen aufweisen wird als vorerst gedacht.
Lilypond eigenpräsenz kann man sich hier anschauen - das erspart mir an dieser Stelle eine Menge Erklärarbeit.
Der Einsatz von Lilypond hat folgende Auswirkungen auf den Promponator:
Ich werde mich bemühen so bald wie möglich die neueste Version des Promponators hochzuladen.
Bis dahin wünsche ich noch einen angenehmen Aufenthalt im Internet,
Samuel Winkler
Ich möchte vorab bemerken, dass ich von nun an regelmäßig voraussichtlich jedes Wochenende eine Art Wochenrückblick verfasse. Dadurch soll vordergründig die unnötige Verwirrung beseitigt werden, welche immer wieder entsteht wenn ich den Titel eines neuen Postings verfasse.
In der letzten Zeit ist jedenfalls vieles passiert von dem ich sagen würde, dass es eine Erzählung wert ist.
Fangen wir damit an, dass ich allein in der Zeit dieser wenigen Wochen die Klasse des Generators zwei mal komplett umgestoßen und neu errichtet habe. Ich habe mich inzwischen darauf eingestellt, dass dies weiterhin noch mehrmals geschehen wird, aber das gehört eben zum Prozess dazu. Meine bisherigen Erfahrungen, die ich in der Spieleentwicklung hatte, fielen eher so aus, dass ich eine Klasse noch nie komplett gelöscht habe, um die Funktion zu rekonstruieren. Es hatte bereits diese Dimension erreicht, dass allein schon das Löschen einer Schleife mit herben inneren Konflikten verbunden war.
Doch nun habe ich die Möglichkeiten entdeckt, die sich mir durch Backup-Dateien beten. Folglich sind meine Hemmungen, etwas produktiv umzustoßen eher gering.
Einer der Gründe für den Umstoß des Generators stellt eine wunderbare Neuerung dar. Ich habe ein Programm gefunden, welches die Möglichkeit eröffnet aus Textwerten eine Notenpartitur und eine MIDI datei zu erzeugen. Das bedeutet, dass ich nun selbst nicht weiter darauf angewiesen bin einen Interpreter zu programmieren geschweigedenn eine Grafische Darstellung des Notentextes auszugeben.
Nun kann ich mich wiederum gänzlich auf den Generator konzentrieren was letzten Endes dafür sorgen wird, dass selbiger weitaus komplexere Funktionen aufweisen wird als vorerst gedacht.
Lilypond eigenpräsenz kann man sich hier anschauen - das erspart mir an dieser Stelle eine Menge Erklärarbeit.
Der Einsatz von Lilypond hat folgende Auswirkungen auf den Promponator:
- Man muss lilypond auf seinem Rechner installiert haben, damit das Programm funktioniert. (Dies habe ich bisher nur auf meinem Ubuntu-Desktop ausprobieren können.)
- Man erhält eine Notenpartitur als PDF
- Man erhält eine MIDI datei zum Anhören der Partitur
Ich werde mich bemühen so bald wie möglich die neueste Version des Promponators hochzuladen.
Bis dahin wünsche ich noch einen angenehmen Aufenthalt im Internet,
Samuel Winkler
Samstag, 5. März 2016
Sagen wir mal so... | Tag 5 und Tag 6
Sagen wir mal so...
ich habe einen kleinen Fehler gemacht, als ich hier irgendwo gesagt habe, dass ich lieber erst die Melodie generiere und mir dazu Harmonische Begleitungen generieren lasse, wusste ich icht, worauf ic mich eingelassen habe.
Es erweist sich im nachhinein als viel effizienter erst eine Harmonie zu haben, auf dessen Basis Töne entstehen, weshalb ich mich kurzer Hand dazu entschieden habe erneut alles umzuwerfen und den Generator neu zu schreiben. Dieses mal habe ich auch ei wesentlich besseres Gefühl, denn ich verwende jede Konstante in form eine Variable. Außerdem ist der code durch und durch kommentiert, weshalb ich noch Jahre nach den heutigen Tagen in der Lage sein könnte zu verstehen, was da abgeht. Ein Vorteil, den ich jedem jungen Informatiker an dieser Stelle nochmal sehr ans Herz legen möchte, denn Kommentare retten manchmal Leben.
Ich habe mir (für den Anfang) sieben Harmonien rausgesucht, die dann unter gewissen Bedingungen nacheinander generiert werden. Aktuell arbeite ich daran, die Töne darauf generieren.
Außerdem strebe ich nebenbei das Ziel an, möglichst viele Tonarten abspielen zu können, was dafür sorgen wird, dass ich noch sehr viel mehr Töne mittels PulseBoy erstellen muss und diese auch alle Einbinden lassen werde.
Deshalb möchte ich an dieser Stelle schonmal zu Protokoll geben, dass ich befürchte, dass die Ladezeit des Programms etwas lang werden könnte... mal sehen, was sich machen lässt.
Bis dahin viel Spaß noch,
Samuel
ich habe einen kleinen Fehler gemacht, als ich hier irgendwo gesagt habe, dass ich lieber erst die Melodie generiere und mir dazu Harmonische Begleitungen generieren lasse, wusste ich icht, worauf ic mich eingelassen habe.
Es erweist sich im nachhinein als viel effizienter erst eine Harmonie zu haben, auf dessen Basis Töne entstehen, weshalb ich mich kurzer Hand dazu entschieden habe erneut alles umzuwerfen und den Generator neu zu schreiben. Dieses mal habe ich auch ei wesentlich besseres Gefühl, denn ich verwende jede Konstante in form eine Variable. Außerdem ist der code durch und durch kommentiert, weshalb ich noch Jahre nach den heutigen Tagen in der Lage sein könnte zu verstehen, was da abgeht. Ein Vorteil, den ich jedem jungen Informatiker an dieser Stelle nochmal sehr ans Herz legen möchte, denn Kommentare retten manchmal Leben.
Ich habe mir (für den Anfang) sieben Harmonien rausgesucht, die dann unter gewissen Bedingungen nacheinander generiert werden. Aktuell arbeite ich daran, die Töne darauf generieren.
Außerdem strebe ich nebenbei das Ziel an, möglichst viele Tonarten abspielen zu können, was dafür sorgen wird, dass ich noch sehr viel mehr Töne mittels PulseBoy erstellen muss und diese auch alle Einbinden lassen werde.
Deshalb möchte ich an dieser Stelle schonmal zu Protokoll geben, dass ich befürchte, dass die Ladezeit des Programms etwas lang werden könnte... mal sehen, was sich machen lässt.
Bis dahin viel Spaß noch,
Samuel
Sonntag, 21. Februar 2016
Ich kann nur mit dem arbeiten, was ich hier habe! | Tag 4
Hallo alle zusammen,
im voraus möchte ich noch kurz Nachreichen, dass der oben genannte Tag sich auf heute bezieht, ich zähle hier nur die Tage, an denen ich gearbeitet habe. Zwar denke ich oft auch zwischendurch mal ewigkeiten über neue Konzepte nach, aber wenn ich hier keine neue Idee veröffentliche, dann zähle ich das nicht als Tag.
Heute (also eigentlich schon Gestern, aber da hatte ich keine Lust auf Arbeit) ist ein komplett neues Thinkpad angekommen, super Sache, wo ich es doch eigentlich nur reparieren lasseb wollte - Ich will mich nicht beschweren.
Aufgrund der Tatsache, dass ich nun endlich wieder einen ordentlichen Grundsatz zum Arbeiten habe bin ich nun jedenfalls motiviert, dieses Projekt fortzusetzen.
Hier also mein kurzfristiges Ziel: Ich muss den Interpreten des ganzen neu Gestalten -- Die ausführung mittels System.wait() wird (wie bereits in diesem Post erwähnt) sonst zu einem Problem. Ich melde mich, sobald es etwas neues gibt
- Samuel
im voraus möchte ich noch kurz Nachreichen, dass der oben genannte Tag sich auf heute bezieht, ich zähle hier nur die Tage, an denen ich gearbeitet habe. Zwar denke ich oft auch zwischendurch mal ewigkeiten über neue Konzepte nach, aber wenn ich hier keine neue Idee veröffentliche, dann zähle ich das nicht als Tag.
Heute (also eigentlich schon Gestern, aber da hatte ich keine Lust auf Arbeit) ist ein komplett neues Thinkpad angekommen, super Sache, wo ich es doch eigentlich nur reparieren lasseb wollte - Ich will mich nicht beschweren.
Aufgrund der Tatsache, dass ich nun endlich wieder einen ordentlichen Grundsatz zum Arbeiten habe bin ich nun jedenfalls motiviert, dieses Projekt fortzusetzen.
Hier also mein kurzfristiges Ziel: Ich muss den Interpreten des ganzen neu Gestalten -- Die ausführung mittels System.wait() wird (wie bereits in diesem Post erwähnt) sonst zu einem Problem. Ich melde mich, sobald es etwas neues gibt
- Samuel
Abonnieren
Posts (Atom)



