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

Mittwoch, 3. Februar 2016

Have you ever touched a running system? | Tag 3

Manchmal muss man sich einfach trauen ein laufendes System nicht nur zu überarbeiten, sondern auch komplett über die Schulter zu werfen und neu zu schreiben (Anmerkung: Es ändert sich nichts daran, dass man das in vielen (sehr vielen) Situationen lieber nicht tun sollte aber heute war es einfach gut) So entschied ich mich dazu meinen gestern Nacht aufgebauten Generator erneut zu scripten und dabei mit viel weniger random und viel mehr Musiktheoretischem Wissen ranzugehen. Es hat sich gelohnt und das Ergebnis kann man mal zeigen. (Ihr könnt euch bestimmt bald eine Version zum Testen runterladen ich stelle oben oder an der Seite oder unten dieses (B)logs eine Linkliste rein oder so. Mal sehen.)
Ich bin diesmal etwas anders an die ganze Sache rangegangen. Das einzige, was gleich bleibt ist der Zufallsgenerator, der Bestimmt auf welchem Ton die Melodie beginnt. Den Rest entsteht nun folgendermaßen. Der Algorythmus spaltet sich bereits ganz am Anfang ein mal. Mit einer Wahrscheinlichkeit von 20% wird ein Ton nach dem Zufallsprinzip generiert. (Ich nehme das als Puffer für die Menschliche kreativität...) ansonst wird streng nach Harmonie vorgegangen. Das bedeutet: Es wird stets der Vorangegangene Ton geprüft und ein Harmonisch Passender Ton dazu gebildet (So passen zum C etwa das E, F, G und A ganz gut.) Die Regelung, dass der Leitton immer zum Grundton führt habe ich etwas gelockert, man kann ihn nämlich auch super zum Dominantgrundton auflösen.
Diese Version (0.1.5) ist dank des neuen Generators sogar einigermaßen sehenswert - Die Bedienung und installation ist sowieso total einfach. (1. Promponator.jar ausführen || 2. auf "Generiere" klicken)
Viel Spaß mit der Dudelmusik,
Schmuel

Dienstag, 2. Februar 2016

Wie der Zufall so will | Tag 2 - Aber viele Stunden später.

Ich habe eine GUI (Graphical User Interface = Grafische Oberfläche) entwickelt.
Sie ist ganz aufregend. Zur Bedienung stehetn 2 Knöpfe parat: Der erste macht das, was ich gleich beschreibe und der zweite beendet das Programm. Letzteres funktioniert einwandfrei, demnach ist 50% der Knöpfe so eingerichtet, dass sie ganz und gar die Vorstellungen des Anwenders befriedigen dürften. Eine Statistik, die ich mir häufiger bei meinen Programmen Wünsche.
Beim errichten der GUI musste ich mich für einen Namen entscheiden, ich habe mich an dieser Stelle für den Namen Promponator entschieden. Im Moment nur ein Arbeitstitel, aber er liegt ganz gut im Mund.
Kommen wir nun zum eigentlichem Thema. Wie bringe ich einem Computerprogramm bei, was Kunst ist? Die Antwort ist zum Glück ganz einfach, denn sie lautet: Garnicht. Alles was ich dem Computer beibringen kann ist Stumpfe Theorie, aber das wusste ich ja bereits, als ich angefangen habe.
Was habe ich also schon geschafft? Ich habe Dem Programm folgendes Beigebracht: Das Stück sollte 64 Gleichlange Töne umfassen. Warum 64? Es lässt sich prima durch vier Teilen und da ich vorerst im vollen Viertel- (bzw Achtel- denn der Spaß (damit meine ich die 64) lässt sich auch ganz gut durch acht teilen) -Takt arbeite macht sich das ganz gut. Natürlich lässt sich die Zahl anhand einer Konstanten ganz einfach (und später bestimmt auch durch den Benutzer) variieren.
Der Anfangston sollte entweder der Grundton, die Terz oder die Quinte des Tonicadreiklangs beginnen. Damit aus dem Stück die Gewissheit hervorgeht, in welcher Tonart wir uns Befinden.
Außerdem (und das ist ziemlich wichtig) nutzt das Programm bereits Leittöne um zum Grundton zurück zu kommen. Sonst hängt man irgendwo mit einer großen septime rum und weiß nicht wohin damit, doch das schafft das Programm nun von alleine.
Das sind die drei ersten musiktheoretischen Umsetzungen, die ich bei der Generierung der Melodiestimme vorgenommen habe. Der Rest ist im Moment absolut random, obwohl ich versucht habe Durchgangstöne einzubauen, was sich allerdings nicht vom Zufallsgeneriertem prozedere Abhebt.
Die Version, die ich hier gerade Beschrieben habe nenne ich jetzt einfach mal Version 0.1 So werde ich sie in meinen Backup dateien Einspeichern und bei gelegenheit bestimmt irgendwo hier zur Verfügung stellen.

Des Rätsels Lösung | Tag 2

Ich habe heute wieder ein paar Stunden rumgebastelt und immer mehr selbstzweifel angesetzt. Nachdem ich mühevoll eine Tonleiter auf dem Klavier aufgenommen habe (was, wohlgemerkt, immernoch so schlimm klingt wie bereits an Tagen zuvor) und in sich ewig hinziehender arbeit endlich ein paar Töne mit einem Audioschnittprogramm an dem viel zu langsamen PC extrahiert und als .wav exportiert habe, das ganze dann per USB auf meinen Pi gezogen habe und eingescripted habe, erhalte ich immernoch den selben Fehler. Hunderte male habe ich hin und herprobiert, bis ich dann auf die so banale Idee kam, einfach mal funktionierende Aufnahmen zu vergleichen. (Ich habe ja bereits Spiele programmiert und in jedem Spiel habe ich die selbe Technik zum einbinden von Musik verwendet, weil es einfach bisher fehlerfrei und Problemlos geklappt hat) Das Vergleichen dann dauerte auch seine Zeit, denn es stellte sich heraus, dass Maßgebend für den Fehler die Länge des Clips ist. fragt mich nicht.
Nun habe ich also eine Reihe von 14 Sekunden langen Clips, die (im Moment) 8 Verschiedene Töne beinhalten. Diese 8 Töne sind natürlich die Töne der Dur-Tonleiter. Die Aufgabe, die nun vor mir steht ist, die Clips verschieden lang abzuspielen. Meine Aktuelle Lösung ist performancemäßig nicht zu verantworten und funktioniert auch nicht überwältigend gut. Außerdem würde sie im Mehrstimmigen Bereich ein paar Probleme verursachen.
Für die, die daran interessiert sind ein bisschen code zu sehen: Hier wäre ein Beispiel für meine schlechte Umsetzung ;)

                //Clip c
c.start();
try {
 Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
c.stop();

Für den Laien: der Clip wird im Hintergrund gestartet, das Ausführende Programm wartet 0,5 Sekunden und dann wird der Clip gestopt. Das hat zur folge, dass der Clip 0,5 Sekunden lang abgespielt wird. Leider hat das zur folge, dass in dieser halben Sekunde keine Andere Tätigkeit vom Programm ausgeführt werden kann, was bedeutet, dass Spätestens in diesem Punkt in der Mehrstimmigkeit Probleme auftreten.

Montag, 1. Februar 2016

Ein Toller Start | Tag 1

Ja, wenn man so richtig etwas schaffen will und sich voller Elan an eine Sache klemmt, dann ist es nahezu notwendig, dass dann sofort alles beginnt schief zu gehen.
Nachdem ich meinen eigentlichen Laptop zur Reparatur geschickt hatte (beziehungsweise, nachdem er verpackt zur Reparatur hier rum steht, weil irgendwie die Rechnung noch nicht auffindbar geworden ist) ging nun auch noch mein anderer PC den Bach runter (Die Softwareaktualisierungen waren zu viel für ihn... Er ist nichtmehr so schön wie vor Zeit.) So kommt es also, dass ich an einem Raspberry Pi arbeiten muss. Bis dahin lief es ja ganz gut und das schöne Ding hat genug Leistung um auch alles zum laufen zu Kriegen (Eclipse, Java und internetbrowser mit mehreren Tabs gleichzeitig offen) Leider läuft da mein Musikprogramm PulseBoy nicht so gut drauf. Deshalb krame ich noch einen Rechner raus (auf dem schreibe ich gerade) und lade mir alles notwendige runter. Ich habe nun also 8 .wav Dateien, fertig zum einbinden. Den Code dafür habe ich bereits geschrieben, aber genau hier bewirft mich Java mit langen Fehlermeldungen. Ich bin mir noch nicht sicher woran das liegt, aber ich bin mir sicher, dass ich an dieser Stelle aufhören werde. Für heute und für diesen Post, ich muss auch an Schlaf denken.
Jedenfalls spiele ich mit der Idee doch die Töne am Klavier aufzunehmen, aber dann steht mir da eine ganze Menge arbeit zum nacheditieren bevor. Das war es erstmal an dieser Stelle,
Gute Nacht.