Aaah I just remembered one more fun fact: The piece was always about a war: "white keys versus black keys" which is what's going on in the middle section. That's why there are F# major and C major chords. :D
Sonntag, 18. Dezember 2022
First look at Musescore 4 and short look at my very first composition
Aaah I just remembered one more fun fact: The piece was always about a war: "white keys versus black keys" which is what's going on in the middle section. That's why there are F# major and C major chords. :D
Samstag, 17. Dezember 2022
December 2022 update
Okay well... I haven't used this blog in a while, have I?
The thing is, for almost everything I want to say, there usually is a better platform. My thougts about worldbuilding and all related creative thinking (which is more than half of what I do) go to a dedicated forum, where I am also a moderator and part of a community that feels like an extended family with some people I love and some odd relatives that I'd rather not be related to...
I have stopped using youtube, preferring to upload my music on bandcamp. Youtube is owned by Google, and it is also often quite terrible when it comes to performance, because obviously the main goal of such platforms is advertisement and data collection.
I still post on Facebook - which is even more terrible - because some people I can only contact there, so I am stuck a bit - and my small corner is surprisingly calm; I do not engage in debates that suck out my life from my body.^^
I have left twitter since that buffoon took over (you might have heard of it), not that it was ever healthy to be on this platform; it compares well to how people used to imagine Hell to be, with everyone constantly trying to bring out the worst in everyone else...
I do have a mastodon account since earlier this year, and I quite enjoy that one; it is calmer than other places, and I am on a server where I genuinely don't have to deal with nazis and/or terfs. Or "proud nationalists" and "gender critical feminists", as they try to conceal their genocidal intentions.
Anyway, the fediverse is nice, it has a lot of amazing art (seriously, check out mastodon.art), but it seems to be lacking when it comes to music. There is a contemporary-music-group, but the only posts seem to be links to commercial sites like applemusic or spotify and shit like that - is that really where serious composers post their music nowadays? o_0
You can find me at @jundurg@mastodon.lol, if I remember correctly. I do post my music when I upload a piece, and even though a tag like #xenharmonic gets used by basically no one, somebody has to start.
(This is another reason to be on facebook - it does have an active group for xenharmonic music, where I discovered quite a bit of interesting music. There also is a dedicated discord server, but it's too big by now and overwhelmingto me.)
Anyways, lots of words about the state of the internet - what about me?
I currently have less time than ever before, because I started an internship, which will end in January. So, I hope I will get to do more creative stuff again afterward. Amongst those things... I kind of have a HUGE backlog of piano pieces that are in danger of vanishing from this planet because there is no recording and I am starting to lose memory, because I haven't played some of them in years. If I try hard, I usually manage to recover them, but sometimes that fails and it's scary.
So one of the things I would like to do in 2023 is attempt to write some of these down, and focus on those that are important to me - I do not actually want to be upset about forgetting pieces that weren't that important. And for that, I kind of want to have a space to just self-indulgently talk about my music despite not posting any of it - huzzah, there is a need for this blog. ^^
The other music news thing is ... MuseScore 4 just came out, and I may or may not find it useful to make some actually listenable versions of instrumental music. It may very well end up being a disappointment, but I already made a few instrumentations of piano pieces this year in Musescore 3, and a few of them turned out nicely.
Because the xenharmonic plugin I'm using only works on Musescore 3, I will most likely use both versions in parallel - 3 for composing weird cool stuff, 4 for writing down old piano stuff and 12edo instrumental experimenting. I really hope I will be able to do that!
I was meaning to write blog posts about my xenharmonic music that I wrote since October 2021, but I never got around it, so ... you can find it here: https://xoiii.bandcamp.com/ Let me just tell you, unidentified reader, that I had a lot of fun writing these. And MAYBE I will get around to write about them too, but there was always something else to do (including writing the next piece, for example)
I am not sure whether I should blog in English or in German; my update posts used to be in German but I might switch to English mostly.
~ .&"=%/&=")% ~
That was it for the informational part. Casual readers may stop here, as I just want to lay out what my piano piece situation currently is, and that's probably not particularly interesting if you can't listen to them. :P
The Piano Suites
There are 9 of them in total - in theory, as the 8th is sort of half-unfinished and also doubles as an experimental sonata that I SORT OF intended to get back to at some point. Suites 1 through 5 are gradually more complex early works (it feels weird to call them early, but hey, 2006 is actually a long time ago now, what the heck.) Suite 6 is written shortly before I started composition at the university, and is probably my most radical piano piece (along with No.8); I should in theory have a score of it (because I did show it to a professor once) but I don't know if I still have it. It has one rhythm in it that I have not been able to transcribe at the time and I am not sure if it is even reasonable to try; I might by now have forgotten how I originally played this section in 2008 and so that might be irrelevant.
Suite No.7 is kind of more boring and conventional (except that I did a somewhat reasonable job at variations) and in theory, a score should exist, but I am also not sure where. Suite No.8 is ... idk what the heck it even is, it consists mostly of improvisational parts stuck together. I made a new recording at some point in the last years, to try to work on it again, and push it towards being an actual piece, but idk. Finally, Suite No.9 is a very conservative two-movement thingy that I only recently decided would be No.9 because those two pieces lacked a title and I was like "eh, sort of fits in there".
The Program Music
There is three of them, the first being from 2007 and actually really fun to play, which is why I kind of want to prioritize a bit; then another one from ... also 2007? Those two are following the plot of two absurd theatre pieces, one of which was only a sketch. And the third one is from 2008, and I actually published it at the time, so there is a recording somewhere. It is Bartókian and fun, but I am currently not particularly keen on working on it - I started several times and it turned out to be difficult to write down, and there isn't a high risk of losing this piece, so...
The Sort-Of Program Music ... or just any other pieces, I guess
Those are pieces that don't follow a plot line directly but they have sort of programmatic titles sometimes. Idk. I'm gonna translate them into english, bc why not:
- Castanian Suite: Two movements, VERY Bartókian, and I love them
- Utnapishtim Suite: Two movements (third movement never finished and got lost), title referencing the Gilgamesh Epos
- Three aggressive pieces: I forgot the first two! Which weren't that good, but still. The third one does deserve some attention tho.
- Deep Night Suite: That one sort of does not require attention, as I kind of remade it into a newer project, and there is at least a partial recording somewhere.
- Neverwhere Suite: Same as above; the old version from 2005 is not worth preserving as it got reworked later; the reworked version does need my attention tho, but it will be moved into a different kind of project.
- the very early stuff. My first composition is from 1995 (I was five!) and it not only has a place in my heart but it is actually on the same level as stuff I wrote when I was sixteen. What the heck. There are other early pieces, but they will not get prioritized I think.
- the three late-summer-pieces from 2005... sort of precursors to the Suites, and they do deserve some attention actually. Part of the second piece is lost, I think, but that was kind of intentional, as it was kind of bad.^^
- ... probably more stuff I can't be bothered to look up right now ...
Early Instrumental Music
I wrote a piece for french horn and piano in ~2007, and a piece for cello and piano in ~2008. There should be scores of them somewhere (except the unfinished last movement of the latter) but particularly the horn piece is actually one of my favourites of the time, and I want to have a shiny new version of it.
...
The ongoing stuff
Collections of piano pieces that don't count as finished because I intend to add more whenever I feel like it. First and foremost, the Gunnerkrigg Chords, which can be found on youtube (until I might move them somewhere) and which I might also try to orchestrate a bit. About half of the 50 pieces already got written down properly, I might want to export them from Sibelius to Musescore though because Sibelius has an abominable user interface that I would like to not inflict on myself ever again.
Then there is the Deep Night collection, most of which is also on youtube. These are close to my heart and mostly VERY short. I'd love to have actual scores of them, because I am not able to play them without sheets and the sketches I am using for playing are abysmal. I kind of have memorized where to jump from where to where, and which things to repeat, and oftentimes, half of the piece isn't even written down. In short, it is a mess that I would like to fix.
And finally, the Neverwhere collection, which might get renamed into Shallow Night or something, because I do not want to use a trademark owned by the BBC. These are old pieces reworked and I also intend to add newer stuff here.
Soooooo.....
What should I prioritize? Deep Night needs the attention, because of the horrible state of it's current sketches... but the Deep Night is the summer solstice, and it is winter. It would be hard to get into the right mindset right now.
So maybe some of the earlier pieces ... Castanian Suite perhaps, 3rd and 4th piano suite (both probably being exhausting to work with, because of their weird rhythms and improvisational effects that are hard to transcribe), and throw in the occasional easy piece ... like my very first composition for example. :D
ALSO needed ... um ... replacing the two strings that are missing from my piano for years now. Oops. (There is actually a reason for that, I promised myself that I would only replace them if I had earned money myself) I might run into difficulties because piano string makers want to know what type of string to replace, and I am pretty sure I have thrown at least one of them away, and ... honestly, I'm not sure if the other one has been stuck somewhere inside the piano for a year now. Might be the case. Anyway, I really desperately need to lowest E for just *two* particular pieces, dammit.
Now ... well, I'm gonna check out Musescore 4 over the holidays, and see whether it turns out to be a disappointment or it motivates me to write stuff.
Donnerstag, 23. September 2021
Reframing Gaps & Creating with ADHD
As I described in the last post ("The Caretaker") I have been thinking about the weights I have taken onto myself as a creative person, and how to deal with them productively (or more precise, how to get rid of them, because they do not seem to serve a purpose anymore).
For my worldbuilding, 2021 has been witness to a pretty substantial change. I had some of the same issues there: Unfinished things, the urge to create a consistent history and maps, and the feeling of "I can't start a new thing unless I have figured out how XYZ works, because if I later change XYZ, everything will have to be changed again". Stuff like that. There other, unrelated issues, but I'm not gonna go into those here.
The important step #1 was: Screw consistency. Screw perfectionism.
But that's kind of the obvious one. And I had already been trying that for years, without success. It's not that easy, apparently.
Today I realized that one thing that I *also* did while throwing out perfectionism, was my attitude towards gaps. When I re-started my worldbuilding, I first made a list with things that would be interesting to explore further. It became apparent that while it would be cool to have a worked-out history timeline, it would also be an incredible amount of work, and not one that I enjoy doing. Yes, I could attempt to write 5000 years of world history, with thousands of cross-references. But then, that would be all I do.
The formula that actually worked: Focus on the things that are actually fun, pick one of them at my own leisure, work on it until it bores me, move on the to the next. My ADHD makes that approach natural to me - I can get hyperfocused on one topic for a week or two, and then it suddenly becomes boring again. Many of my problems came from my attempts to continue and finish stuff when I already had moved on the the next *Shiny Thing* mentally.
But if I do that, then I will leave a huge trail of unfinished stuff. And that thought kind of depressed me. So I need to reframe what it means for something to be unfinished:
~~ Every unfinished thing is an opportunity to later come back and make something new. ~~ Whenever I run out of steam at a current project, I can go back to my pile of unfinished works and pick one, at my own leisure, *not* because I have to finish it, but rather because it sparks my interest.
And sometimes stuff *does* get finished, of course. Because at the time, I want to finish it. I can spend an entire day hyperfocused on a project, until it's done. In fact, my ADHD can make it almost impossible to *not* work on the thing that I am hyperfocusing on.
The main problem that remains is forgetting things. I am mainly unhappy with leaving pieces unfinished because I know that I will forget them and when I come back, find the thing in ruins. Maybe I can solve that by reframing ("It's an opportunity to create a slightly different thing"), maybe not. It's very similar to the consistency issue in my worldbuilding, and there I have the great advantage of just writing things down. That is much harder to do in music, because I have basically zero patience when it comes to making sketches. I write down exactly as much as I need to come back to a piece on the next day, but not enough to come back to it a week later.
(Yes, I am aware that I can also record myself playing, but then I run into the issue that I have basically no motivation to go through a recording later, so it effectively vanishes until I find it, like, 2 years later. Or never.)
Reframing gaps - one more thing that occured to me is that there is a difference in how I approach worldbuilding and music. You see, I don't ever intend to *finish* a world. It's all about having a space to add literally anything I want. Thinking about philosophy? Write about a school of thinking. Thinking about dreams? Write about dreamers and magic, or about prophetic culture, or metaphysics. I can even - and will, probably - create a history of orchestra music for northwestern Duogiana. Worldbuilding, to me, is just about the most flexible creative hobby possible.
Music is obviously different. A friend of mine recently shared the quote "music is the study of invisible relationships between internal objects", apparently some ancient Greek´s opinion (but I do not care who said it. People ain't wise because they lived a long time ago.) I really like that phrasing. When I compose something non-derivative, I sometimes feel like I am working with something very abstract but somehow also very real. And then I "wake up" and have no idea what I just thought about.
Anyway, I got distracted again - the point is, there is no reason to view music as something that *needs to get finished*. Even a finished piece can be interesting enough to further spawn creativity. I'm free to go back to old pieces and extend on what I find there, instead of going "this is finished, I have to make something *entirely new*", a way of thinking that effectively stopped me from writing anything larger for years.
I will probably make lists with possible *fun* projects to do; not necessarily composing, I could also transcribe an older piece, program something, roll some dice, or catalogue and rename older stuff - I've held back from the latter because it seems horribly self-indulgent, but hey, I'm a pretty self-centered person and I'm gonna just own that, because I simply function better this way.
And I have been surprised several times over the last months that sometimes the nerdiest, least accessible stuff actually got the most positive feedback. And sometimes I get none - but if I already enjoyed working on it, who cares? :)
~
This blog post came out way less structured than I anticipated. It's more of an explorative thinking-aloud post than a polished essay, and ... well, that's similar to what I was talking about, so on a meta-level that's probably appropriate.^^
Sonntag, 19. September 2021
The Caretaker
I've been on hiatus from playing piano since May; the longest hiatus of my life probably. It started because my wrists were not okay, but I continued it far longer than I needed to. At some point I realized that I don't want to start again exactly where I left off.
From my earliest childhood memories onward there has always been this pressure on me: "Don't wast your talent!". I realize now that I have rarely ever in my life *decided* to compose - most of the time I was more like "I have this idea, I *cannot* let it go to waste, it is my duty to not abandon a good idea". I got asked at my final exams why I, a supposed *serious composer* would spend half my time writing piano music laypeople can understand, and while that question is incredibly snobbish by itself, the answer is not merely "because I like it", it is actually "because I had this idea and I am now responsible for it's survival".
It's like if I lived at the edge of a forest and there is a constant flow of poor wounded forest animals seeking shelter, and I can't just abandon them, so I never leave the house longer than a day or two. Except music isn't alive - or is it?
There were a few times in my life when I had the urge to write music to communicate something that was beyond words, and the pieces I wrote then are those that I am still proud of. My last "true" ensemble piece was written in 2012, and was, ironically, about the impossibility to share a feeling. And then it never got played, because, as it turns out, if you write for oboes and tubas (plural), you won't find anyone that plays your music. So then I stopped. Everything I wrote after that, I either wrote for myself to play, or didn't take as seriously.
Sooooo... now when I re-start composing again, I want to do it on my terms, I want to stop the endless drain of "You can't just abandon this idea, it is good, it deserves to live!". I don't know how. As far as the "easy" music goes, I compose faster than I can write it down, so I will *never* reach a point where I'm done. And at the same time, I spend so much time on that, that I don't have any energy left to ask myself - why?
This isn't a crisis. I could always just go on, and I would make some music that a few people like, and also some other music that *nobody* except me even listens to (seriously, I have youtube videos with 0 views). On my piano, there are sketches for about 10 unfinished "easy" pieces - and already I feel the urge to just go and work on these, "so that they don't get wasted", despite knowing that it will never stop. I have 100+ piano pieces and too many of them I have neither written down or recorded, so the only thing I can do is play them again and again just to hold off the inevitable. Should I just go through them and decide "Okay, you'll gonna die with me"? It's super ironic that one of my favourite composers just literally burned her pieces, if they weren't good enough to her almost impossibly high standards - whereas I go back to stuff I wrote when I was 11 and say "hah, kinda cute, let's save it". And that mentality has even crept into my thinking when I'm composing so-called serious stuff. I just cannot bring myself to delete anything, and it starts to clutter. I spend all my time caring for mediocre stuff and never look further, because the next one is already waiting.
Freitag, 1. Mai 2020
AlgoLine B (work-in-progress)
Dadurch gibt es jetzt u.a. die Keywords 'start' und 'end', um eine Instruktion nur in einem bestimmten Teil des Stücks aktiv sein zu lassen. Gleich verwendet habe ich das gerade eben mit der ebenfalls neuen Deterministic-Random-Instruktion. Zufallsfaktor will ich eigentlich minimieren, damit würde ich es mir zu leicht machen. Aber hin und wieder ist so ein bisschen Zufall recht praktikabel. Besonders am Start. Die ersten 5 Schläge zufällig zu bestimmen, und dann den Rest des Stückes Regeln folgen zu lassen (die die Vorgabe der ersten 5 Schläge verwenden) hat aber was.
Die Zufallsfunktion ist bewusst "trashy" programmiert, da sind zwei kleine Potenzen drin, und ein Sinus, und das irgendwie hochmultipliziert. Ich wollte da nicht lange darüber nachdenken - es reicht, wenn es irgendwas tut. Und vor allem: Es muss immer das gleiche tun, solange die Parameter unverändert sind. Denn dann kann ich am Stück feilen, ohne ständig eine neue Vorgabe zu haben, mit der die Instruktionen vielleicht vollkommen unterschiedliche Ergebnisse haben.
Allen Instruktionen gemeinsam sind also jetzt die Keywords 'start', 'end', 'fade_in', 'fade_out', 'max' und 'min'. Die Fade-Keywords habe ich noch nicht implementiert, die sollen später dann mit start/end zusammenwirken.
'MAX' ist relativ einfach zu erklären: Es setzt der Gesamtwirkung einer Instruktion einen fixen Deckel - sobald es darüber hinausgeht, wird alles herabskaliert, sodass es in den Rahmen zwischen 0 und diesen Deckel passt.
'MIN' ist etwas schwieriger zu erklären. Es legt nämlich nicht die geringstmögliche Wirkung fest (denn häufig wird ja ein Pitch mit 0 bewertet, und das lässt sich durch multiplizieren schon mal nicht hochskalieren) sondern es setzt ein Minimum fürs Maximum fest. Klingt verdreht?
Ist gar nicht so verdreht. Die Instruktion soll mindestens die festgelegte Auswirkung auf das Stück haben. Mehr ist möglich, dann wird nicht herabskaliert. Wohl aber wird hochskaliert, bis der höchste Wert zumindest mal MIN erreicht hat.
MIN x MAX x lässt es nun in Kombination zu, den höchsten Wert immer fix auf x zu belassen. Vorausgesetzt, es gibt überhaupt eine Wirkung. (Jetzt gerade fällt mir auf, dass eine Instruktion die nur Nullen liefert eventuell Probleme macht. Das muss ich wohl erst abfangen...)
Fehler gibt's viele. Teilweise mache ich durch das Fixen von Bugs alte Stücke, deren Rezept ich noch gespeichert hatte, kaputt. Damit muss ich wohl leben; Rückwärtskompatibilität kann ich einfach nicht gewährleisten, solange ich immer mal wieder an den Grundlagen schraube. Aber insgesamt wird es momentan in sich konsistenter.
Ich lad auch bald wieder neue Stücke hoch. Anhören tut sie quasi niemand.^^ Ein Stück hat zwei Dislikes und sonst nix, das finde ich ziemlich amüsant. Ich selbst hab viel Spaß daran. Zum Erhalt meiner psychischen Gesundheit muss ich nämlich jeden Tag spazieren gehen, und dabei hör ich mir dann die Stücke an. In Zukunft werd ich dann wohl an die erste Pandemiewelle, die Dürre und an die (fast) immer-gleiche Spazierstrecke denken, wenn ich die wieder höre.^^
Was ich bald implementieren will:
- die eine oder andere Funktion, die auf der Zeitachse läuft. Zum Beispiel sowas wie eine Sinuskurve über die Tonhöhen. Vermutlich eher albern, aber was solls, wär recht einfach zu implementieren, und ist noch mal was anderes.
- die Selektoren benötigen ebenfalls eine Generalüberholung (bei denen wär's dann schon die zweite). Ich will ein Feature, das es erlaubt, bevorzugt bei einer bestimmten Tonhöhe zu selektieren (im Moment gibt es da nur: höchster Ton, niedrigster Ton, und mittlerster Ton. Das ist ausbaubar.)
- und einen Selektor will ich einbauen, mit dem vor 4 Jahren mal die erste Version von AlgoLine begonnen hat: Wähle nur einen Ton aus, wenn es nur genau eine bestbewertete Tonhöhe gibt - sonst Stille. Das führte damals zu Stücken die relativ bald in sich selbst zusammenfielen und einfach aus waren. Aber mit der Menge an Instruktionsoptionen, die ich mittlerweile habe, dürfte das anders sein. Bzw. ich kann diesen Selektor ja zu anderen dazuschmeißen.^^
Sonntag, 26. April 2020
AlgoLine B (work in progress)
(Es ist oft so, dass sich das Gewichtsverhältnis von Instruktionen im Verlauf ändert - im Test hatte ich auch ein Stück, das am Anfang einem klaren Puls folgt, der aber nach einer Weile zusammenbricht und ab dann überhaupt nicht mehr erkennbar aufscheint.)
Modulo ist ein wichtiges Keyword; ich will das bei einigen anderen Instruktionen einbauen. Schon gesehen ist dies bei same_intervals, wo es eine besonders große Rolle spielt - es ist also jetzt möglich, dass diese Instruktion z.B. ein Intervall aufwärts zu einem C und zwei Oktaven abwärts zu einem C als das gleiche ansieht. Auch möglich ist es, Intervalle als gespiegelt zu betrachten, sodass 5 Schritte aufwärts und 5 Schritte abwärts gemeinsam gezählt wird. (same_intervals zählt von Anfang an mit, welche Intervalle schon im Stück sind, und vermeidet oder bevorzugt je nach Häufigkeit)
Leider führt das im Moment zu einer deutlich höheren Rechenzeit - zwar speichere ich die verwendeten Intervalle während dem Generieren mit, aber das tue ich nur für die tatsächlichen, nicht für Modulo. Und da die "Notenzeile" selbst nicht wissen kann, welche Modulo später über sie angewendet werden, kann ich das auch nicht so ohne weiteres mitspeichern. Daher müssen für jeden Schritt alle Intervalle von Anfang an wieder durchlaufen werden, was ein enormer Aufwand ist. Mal sehen, ob ich das geschickter hinkriege - eigentlich müssten ja eher die Instruktionen mitspeichern. Im Moment führt das dazu, dass das Generieren geschätzt zehnmal langsamer abläuft. (Vermutlich noch durch andere Faktoren beeinflusst - allmählich summiert sich schlechte Implementierung auf.)
~
Ein grundsätzliches Problem ist, dass alle Instruktionen aufsummiert werden, aber das Auswählen der Töne auf Basis von den Besten funktioniert. D.h. wenn eine Funktion bewirkt, dass Töne a, b, c, d, e, ... um +1000 bevorzugt werden, aber eine andere bewirkt, dass Ton b um +1 bevorzugt wird - dann ist b alleine der beste Ton und alle fast gleichen anderen werden ignoriert.
Damit das nicht so ist, gibt es jetzt das Selector-Keyword threshold. Damit ist z.B. eine Auswahl aus der Menge aller Töne mit einer Bewertung von den mit 98% bis 100% des jeweiligen Maximalwertes möglich.
Exzessiv angewandt habe ich dieses Keyword in Fumbling Important Extremely Talon. Dort gibt es an Instruktionen überhaupt nur das allereinfachste avoid same_pitches, und die eigentliche Arbeit machen die Selektoren - die entweder die tiefsten oder die höchsten Werte auswählen, allerdings aus vielen verschiedenen Prozentbereichen. Darunter auch so niedrige wie 15% - 25%. Das heißt, dass schlecht bewertete Töne nach einer Weile auch ausgewählt werden, was dazu führt, dass unter einer Aufwärtsbewegung allmählich weitere entstehen. Die durcheinanderlaufenden Geraden mit unterschiedlicher Steigung sind auch optisch schön, ich habe aber leider kein Bild davon erstellt.
~
Im Moment ist der Code an vielen Stellen chaotisch und es gibt Inkonsistenzen gegenüber der Eingabe und der Ausgabe, was natürlich absolut nicht ideal ist, da ich ja die Rezepte aus dem Programm wieder als Text speichern können möchte, und zwar exakt der Eingabe entsprechend.
Je mehr Keywords ich hinzufüge, desto größer wird das Chaos, da es dieses und jenes Keyword bei der einen Instruktion gibt und bei der anderen nicht, und sie überall mehrfach implementiert sind. (Bis zu einem gewissen Grad notwendig, da sie verschiedene Dinge tun.) Für die wichtigsten Keywords möchte ich das aber ändern, sie sollen gemeinsam erfasst werden, und nur bei den Instruktionen einen Effekt haben, bei denen es eine Implementierung dafür gibt.
Etwas, was ich außerdem gerne einführen möchte, ist ein Keyword start, das bewirkt, dass eine Instruktion erst ab einer gewissen Stelle hinzugeschaltet wird. Eigentlich wollte ich das ursprünglich gar nicht, da ich es interessanter fand, wenn Veränderungen allein aus den immer-geltenden Instruktionen, die gegeneinander greifen, entstehen... aber mal sehen. Interessanter ist vielleicht das Keyword end. Denn oft ist es ja so, dass eine Instruktion unbedingt notwendig ist, damit am Anfang ein bisschen "Chaos" erzeugt wird, und z.B. vermieden wird, dass nur Tonleitern übrigbleiben. Sobald das aber einmal geschehen ist, läuft es eigentlich auch ohne dieser interessant weiter.
~
Zum Abschluss: Cute demon faces! <3
Freitag, 27. März 2020
AlgoLine B: "Voice Shadow Glitter Eventuality" und mehr...
1. Untrue Island Mess Linguist
2. Voice Shadow Glitter Eventuality
3. Well Nothing Thought Splash
In allen drei Fällen habe ich nachträglich einen Low-Pass-Filter darübergelegt - hohe Töne sind einfach generell lauter bei MIDI, und dem muss ich entgegen wirken. Well Nothing hat außerdem noch deutlich mehr Nachhall verpasst gekriegt.
Das Muster ist jeweils ähnlich. Der zentrale Bestandteil:
avoid 1 same_interval except 0 .. ..
avoid 1 same
Es werden also sowohl Tonwiederholungen als auch Intervallwiederholungen vermieden, mit Ausnahme vom 0-Intervall (also ein liegender Ton). Das führt prinzipiell mal zu einem Muster von anfänglichen Chaos, das sich allmählich sortiert zu immer längeren Liegetönen oder Akkorden.
Zweitens gibt es eine Auswahl von Präferenzen für verschiedene Modi - bzw. eigentlich den selben Modus in unterschiedlichen Transpositionen. Indem es der selbe ist, ist es nämlich leichter, Überlappungen zu verhinden, die einzelne Töne herausstechen ließen. Für die ersten beiden Stücke ist es jeweils ein Quarten-Turm-Modus, leicht mikrotonal verschoben.
Und schließlich Rampen, die dafür sorgen, dass bestimmte Register gegenüber anderen bevorzugt oder benachteiligt werden - was eine temporäre Sache ist, da "avoid same" alle Unterschiede im Laufe der Zeit ausgleicht.
Für die ersten beiden Stücke habe ich das Rezept leider nicht zwischengespeichert, das dritte hab ich hingegen und kann es hier vollständig präsentieren:
~ ~ ~
Well Nothing Thought Splash
Twelfthtone
avoid 12 same_intervals except 0 114 -114 144 -144
avoid 12 same
avoid 1 ramp_region 100 0
avoid 1 ramp_region 240 0
avoid 1 ramp_region 500 200
avoid 1 ramp_region 400 500
prefer 512 set modus 12 12 10 8 12 18
prefer 256 set modus 12 12 10 8 12 18 offset 7
prefer 128 set modus 12 12 10 8 12 18 offset 5
prefer 64 set modus 12 12 10 8 12 18 offset 8
prefer 32 set modus 12 12 10 8 12 18 offset 4
prefer 16 set modus 12 12 10 8 12 18 offset 9
prefer 8 set modus 12 12 10 8 12 18 offset 3
prefer 4 set modus 12 12 10 8 12 18 offset 10
prefer 2 set modus 12 12 10 8 12 18 offset 2
prefer 1 set modus 12 12 10 8 12 18 offset 11
prefer 1 set modus 12 12 10 8 12 18 offset 1
prefer 16 set modus 72
prefer 16 set modus 72 offset 7
prefer 16 set modus 72 offset 5
prefer 16 set modus 72 offset 8
prefer 16 set modus 72 offset 4
prefer 16 set modus 72 offset 9
prefer 16 set modus 72 offset 10
prefer 16 set modus 72 offset 2
prefer 16 set modus 72 offset 11
prefer 16 set modus 72 offset 1
select lowest 3 apathetic
select lowest 3
select middleregister 1
select middleregister 3 apathetic
dimension 500
lowest_pitch 20
~ ~ ~
(In der Aufnahme wird dieses Rezept rückwärts abgespielt - deswegen die glockenhafte Zunahme des Chaos ganz am Ende.)
Ich habe bereits angefangen, ein Usermanual zu schreiben - dann kann ich das Programm auch mal anderen Menschen in die Hände geben. :)
Dienstag, 17. März 2020
AlgoLine B (Work-in-Progress)
(Lange liegen lassen aus gutem Grund: Ich hatte mir vor 2 Jahren gesagt, dass ich erst dann wieder daran weitermache, wenn mein Orchesterstück und meine Diplomarbeit fertig sind.)
Der Code von 2016, das stellte sich nach kurzer Begutachtung heraus, war absolut grauenhaft; wüstes Durcheinander von Referenzen, unklar benannten Variablen, einem Mischmasch aus Deutsch und Englisch... daran weiterzumachen, hatte ich echt keine Lust. Also nochmal komplett neu anfangen.
Im Gegensatz zu AlgoLine A (wie ich die alte Version jetzt mal nenne), wo es keinerlei Interface gab, um die Generation des Stücks zu beeinflussen (alle Befehle dafür standen direkt im Code) wollte ich es diesmal so anlegen, dass auch andere Personen theoretisch etwas damit anfangen können. Daher gibt es zu jedem Algorithmus, der im Programm zur Verfügung steht, eine äquivalente Textzeile - damit ist sowohl laden als auch speichern möglich, und vor allem, die Anweisungen können vorher in ein txt-File geschrieben werden.
Ich überlege im Moment noch, was ich noch alles in diese "Rezepte" hineinnehme. Derzeit besteht noch jedes Rezept aus drei Teilen:
1) Auswahl der StepWidth, standardmäßig 12 Töne pro Oktav, möglich sind aber auch 24, 36, 48, 60 und 72. Intern gelöst ist das, indem ich z.B. für Vierteltöne einen zweiten Midi-Channel zuziehe, dem zur Initialisierung einmal ein PitchBend-Befehl zugewiesen wird, alles um einen Viertelton höher abzuspielen. Für die 72-stufige Oktav sind es dann schon 6 Kanäle. Noch kleinere Abstände wären also theoretisch noch möglich, aber praktisch ist es schon bei Zwölfteltonschritten schwer, einen Unterschied zu hören.
2) Die Instructions, jeweils eine Zeile pro Instruktion. Diese dienen alle dazu, zu entscheiden, welche Tonhöhen für einen neuen Schlag ausgewählt werden, basierend auf den bisherigen oder ohne Kontext. Jede Instruktion liefert einen positiven oder negativen Wert für jede einzelne auswählbare Tonhöhe. Die Werte aller Instruktionen werden dann addiert, und das Gesamtergebnis an die Selectors weitergegeben.
3) Die Selectors, deren Aufgabe es ist, basierend auf den Bewertungen eine Auswahl zu treffen. Mit "die am höchsten bewertete Tonhöhe" allein ist es nämlich noch nicht getan, denn da gibt es häufig Gleichstände. Ein AllSelector wählt in diesem Fall einfach alle aus, während ein LowNoteSelector sich jeweils nur die tiefste herauspickt. (Meistens mit der Konsequenz, dass die übrigen der Reihe nach von unten nach oben abgearbeitet werden) Es gibt auch noch die Möglichkeit, einen LowNoteReverseSelector zu verwenden, der wählt dann nicht aus den höchstbewerteten, sondern aus den niedrigstbewerteten Tonhöhen jeweils den tiefsten Ton aus.
Das Eingeben/Speichern/Laden von Rezepten passiert in der Konsole, erst nach dem Generieren eines Stückes startet der Player - dessen GUI ich zumindest mal angefangen habe:
Die roten Punkte in der Mitte sind die aktuell klingenden Tonhöhen. Alles darüber ist vergangen, das darunterliegende kommt noch. Je heller der Grauton, desto höher die Bewertung für die einzelne Tonhöhe.
Rechts wird es eine Buttonspalte geben. Da ist vorläufig nur mal ein paar bunte Quadrate anzuklicken; später soll da noch draufstehen, was der Button tut, und welches Tastaturkürzel stattdessen auch verwendet werden könnte.
Unten gäbe es eine Anzeige für die Tonhöhen, aber bei den Zwölfteltonschritten sind es einfach zu viele, als dass es sich gut darstellen ließe. Da muss ich noch etwas überlegen, wahrscheinlich werden dann nur bestimmte Tonspalten beschriftet, anstelle von allen.
~
Vorhin hab ich mal das erste neue Stück auf Youtube hochgeladen:
Sweet Soil Exhort Navel
Davon kann ich hier das gesamte Rezept vorstellen:
// Sweet Soil Exhort Navel 2020-02-17
TWELFTHTONE
prefer 4000 set modus 28 5 14 28 5 14 14 5 offset 3
prefer 1600 set modus 14 14 14 5 14 14 5 offset 7
prefer 400 set modus 14 14 14 5 14 14 5 offset 10
prefer 100 set modus 14 14 14 5 14 14 5 offset 11
prefer 25 set modus 14 14 14 5 14 14 5 offset 2
prefer 5 set modus 14 14 14 5 14 14 5 offset 8
prefer 1 set modus 14 14 14 5 14 14 5 offset 9
avoid 100 sameas -300 to -200 ramp
avoid 200 sameas -2000 to -1000 ramp
avoid 1 sameas -900 to -1 ramp
avoid 10 same
AllSelector
~
Jede Instruktionszeile beginnt entweder mit "avoid" oder "prefer", was im Prinzip ein Vorzeichen darstellt. Die Zahl danach ist ein Verstärker, der die Zeile im Verhältnis zu den anderen gewichtet. (Was nicht immer ganz so gut funktioniert, da manche Instruktionen einfach um ein Vielfaches stärker sind als andere.) "Modus" ist eine von mehreren Möglichkeiten, eine Menge an Tonhöhen herauszupicken, die vorzuziehen sind. Die Zahlen geben die jeweiligen Intervalle an - in semitonaler Musik (^^) würde 2 2 1 2 2 2 1 eine Durtonleiter vom untersten Ton an beschreiben. Mit Offset-Wert versetze ich die Skala dann noch ein Stück.
"sameas" lässt einen Bereich in der Vergangenheit definieren, und Noten von dort vermeiden oder bevorzugen. "avoid sameas -4 -2" würde sagen, dass die Noten vom vorletzten bis vorvorvorletzten Schlag (?) zu vermeiden sind. "ramp" ist ein mächtiger kleiner Zusatz: Da wird fließt nämlich ein Ton umso mehr in die Wertung ein, je näher er am Jetztzeitpunkt ist. Und da ich das nicht gut skaliert habe, heißt das, dass eine 100-Töne lange Rampe de facto den letzten Schlag 100mal gewichtet.^^
"Avoid same" ist die simpelste Instruktion, die aber fast immer gut ist, dabeizuhaben... das Stück zählt mit, wieviele Noten es von einer Tonhöhe schon gab, und wertet sie niedriger, je mehr es sind. Führt dann also dazu, dass Tonhöhen, die lange Zeit nicht vorkamen, irgendwann doch durchbrechen.
~
TODO:
- das GUI ist ja erst halbfertig. Da kommt noch eine Möglichkeit, Spieltempo und Instrument zu verstellen, neben anderem wichtigen Kram.
- neue Algorithmen! Die Schwierigkeit ist hier, etwas zu finden, das nicht enorme Rechenzeit oder Speicherplatz braucht. "avoid same" funktioniert nur, weil ich die Töne beim Generieren schon mitzähle.
Ich möchte aber gerne ein "avoid same-intervals", und da muss ich gerade noch überlegen, wie ich das genau definiere. Damit das geht, würde ich für jeden Schlag speichern, welche Intervalle er gegenüber zum vorigen beinhaltet. Bei einzelnen Noten geht das ja, aber bei Akkord zu Akkord? Da steigt die Anzahl der möglichen Intervalle ja schnell an. Dreiklang zu Dreiklang beinhaltet 9 Intervalle: Von jedem Ton des ersten Klangs zu jedem Ton des zweiten...
Wenn ich die bloß als Menge (Set) speichere, verliere ich noch die Information, wie oft ein Intervall auftaucht. Hmm...
- mal ein paar Standardrezepte als kommentierte txt-Files erstellen, damit es für andere verständlicher wird.
- mich entscheiden, ob die "dimension" - Anzahl der verschiedenen Tonhöhen eines Stücks - und der Offset von den tiefsten Midipitches auch Teil des Rezepts werden sollen. Da hab ich nämlich beim Rezept oben vergessen, zu erwähnen, dass es auf eine Dimension von 400 angewendet wurde, um das Stück zu erzeugen.
- danach suchen, ob AllSelector nicht doch noch irgendwo einen Bug hat, der dazu führt, dass aufwärtslaufende Girlanden entstehen, wo es ja eigentlich keine Bevorzugung der Tonhöhe geben sollte. o_0
Samstag, 14. März 2020
Üpdäätle -52-
Montag, 23. Dezember 2019
Üpdäätle -51-
Von wegem technologischen Fortschritt; ziemlich viele Funktionen im Netz werden eigentlich momentan eher ständig schlechter. Youtube und Facebook sind so zugemüllt mit kapitalistischen Datensammelalgorithmen, dass sie auf meinem langsamen Computer langsam kaum noch funktionieren. Abgesehen von den tausend anderen Arten, in denen die großen monopolistischen Plattformen scheiße sind...