Vom Singen

Singen gehört für mich zur Vorweihnachtszeit wie für andere Leute Plätzchen.

Obwohl: Plätzchen sind für mich natürlich auch sehr wichtig im Advent.  Und gesungen wird bei uns in der Familie sowieso zu jeder Jahres- und Tageszeit.

In der Adventszeit aber vielleicht noch ein bisschen mehr.

Deswegen habe ich auch sofort zugesagt, als mich eine Freundin vor ein paar Wochen fragte, ob ich ihren Schulchor im Dezember bei der Aufführung von Bachs Magnificat unterstützen würde.  (Die Männerstimmen sind in Chören fast überall chronisch unterbesetzt, was dazu führt, dass man insbesondere als Tenor umworben und hofiert wird, dass es eine wahre Freude ist. Zu den Proben muss man auch nur kommen, „wenn man es einrichten kann“.  Egal, wenn man das Magnificat vor 15 Jahren zuletzt gesungen hast. Für einen echten Tenor kein Problem.)

Als es jetzt soweit war, hat mich meine enthusiastische Zusage (natürlich) genervt: Eigentlich hatte ich doch viel zu viel anderes zu tun; die Kinderbetreuung blieb, während ich bei Proben und Aufführungen war, wieder an meiner Frau hängen, ich war viel zu müde und schlapp um vier Abende Singen hintereinander durchzuhalten usw.

Aber dann stehst du da und singst. Hörst auf die Sänger neben dir, das Orchester vor dir, musizierst mit ihnen. Bist glücklich.

(Und löst das Problem mit der Kinderbetreuung, indem du zum zweiten Konzert die Familie einfach mitbringst.  Piece of cake — für einen echten Tenor…)

 

 

Vi Hart: Twelve Tones

Oh, the awesomeness:

(Unbedingt bis zum Ende ansehen!)

Ich behaupte ja immer, ich sei kein Nerd/Geek.  Aber dieses Video ist so eindeutig Teil einer bestimmten Kultur und gleichzeitig für mich so großartig, dass ich wohl doch einer sein muss.

Wie viel Arbeit und Liebe in die Entstehung des Videos geflossen ist, kann man hier nachlesen.

Goldene Zeiten, in denen Menschen so etwas produzieren und allen anderen zugänglich machen, einfach so!

Nachtrag: Salon.com schreibt zurecht: „30 minutes might seem like an eon in Internet time, but I’ve watched it twice in the last twelve hours and I don’t regret a second. ‚Twelve Tones‘ is the most deliriously and delightfully profound thing you can find on YouTube, until the next amazing video from Vi Hart comes along.“

Jenes und dieses

Bevor ich hier gar nichts mehr schreibe, schreibe ich lieber wenigstens ganz kurz mal auf, warum ich hier gar nichts mehr schreibe:

1. Dem Baby geht’s gut, danke der Nachfrage. Es benimmt sich so, wie es sich für ein drittes Kind gehört, d.h. es gewöhnt sich schnell an den konstant hohen Gesangs- und sonstigen Lärmpegel hier.  Gerne (v.a. nachts) leistet es auch schon seinen Beitrag dazu.

2. Ich habe korrigiert und korrigiert und korrigiert.  Insb. über 50 Zweitkorrekturen bei Prüfungsarbeiten aus einer über dreistündigen Mathe-Klausur.  Kein Abi, aber Fachhochschulreife. Ich bin nicht sicher, ob Abi noch mehr Aufwand ist — ich werde es in den nächsten Jahren sicher herausfinden.  Ich habe ungefähr 30 Zeitstunden in diese Zweitkorrekturen investiert.  Wie lange ich für die Erstkorrektur gebraucht hätte, mag mir gar nicht ausmalen.
Dafür weiß ich jetzt recht gut, wohin ich meine Schüler im nächsten Schuljahr bringen muss. Auf in den Kampf, Torero!

3. Wir Referendare haben, seit unsere Lehrproben und Prüfungen rum sind, an der Schule relativ viel Ruhe.  Deshalb sind wir die natürlichen Kandidaten für Abi-Aufsichten und das Führen des Protokolls bei mündlichen Prüfungen.  Nächste Woche z.B. habe ich zwar statt meiner normalen 12 nur 8 Stunden Unterricht, bin zum Ausgleich aber 10 Stunden Protokollant!  Ich würde lieber unterrichten, hänge nämlich in zwei Klassen ganz schön hinterher.  Aber das, scheint mir, ist das Los des Lehrers: Fürs Kerngeschäft zu wenig Zeit, dafür ganz viel nerviger anderer Kram!

4. Um hier nicht nur rumzujammern, auch mal etwas durchweg Positives: Es hat geklappt! Ich darf nächstes Jahr einen wöchentlichen Kurs für „besonders befähigte“ Schüler anbieten, die aus dem ganzen Landkreis kommen.  „Programmieren kreativ“ hab ich den Kurs mal genannt — und freue mich natürlich wie wahnsinnig darauf!  Es gibt an diesem sogenannten „Seminar“ Kurse in Mathe, verschiedenen Naturwissenschaften und eben Informatik* — die seien sogar besonders beliebt**, sagt man mir, so dass dieses Jahr gleich drei davon angeboten werden.  Ich habe — schluck — gleich den für „fortgeschrittene Oberstufenschüler“ bekommen, d.h. ich muss denen richtig Futter geben.  Sehr spannend, sehr herausfordernd.

5. Die Lehrerband.  Der große Auftritt beim Schuljahresabschlusshock rückt näher.  Die letzten vier Auftritte (Sommerfest 2012, Schulweihnachtsfeier 2012, Lehrerweihnachtsfeier 2012, Rock am Ring 2013) haben wir dermaßen gerockt, dass die Erwartungshaltung im Kollegium — insb. beim OStD — ins Unermessliche gestiegen ist. Werden wir das noch toppen können? Ich behaupte bescheiden: Ja!

Speaking of which…

6. Meine Serie „Musik mit Embee“ wird natürlich fortgesetzt, versprochen.  Ich habe ganz viel schönen Code schon lange fertig. Musikbeispiele von Bach bis Beatles sind bereits ausgewählt.  Aber: Ich muss den Code noch didaktisch reduzieren und pädagogisch sinnvoll organisieren, die Tonbeispiele präparieren und das Ganze am Schluss anschaulich präsentieren. Sowas braucht Zeit.  Und die fehlt mir gerade etwas, nicht nur wegen Punkt 1-3, sondern weil ich an den letzten Wochenenden des Schuljahres ständig unterwegs sein werden.  Z.B.:

7. Ende nächster Woche besuche ich Herrn Rau! Ja, da staunt ihr. Ich fahre zum Tag der Informatik-Lehrerinnen und -Lehrer, den er organisiert, nach München und halte da einen Workshop zu Snap! Auch das wird spannend und herausfordernd für mich; für die Teilnehmer hoffentlich eher anregend und kurzweilig.  Ach was, für mich wird es anregend und kurzweilig!
Vielleicht treffe ich ja den einen oder anderen hier Mitlesenden dort. (Ingo?)

Damit lasse ich’s für heute mal gut sein. Mehr als 7 Sachen kann sich sowieso keiner merken.  Nicht, dass ihr am Ende wieder vergessen habt, was #1 war. (Tipp: Es ist klein, soooo süß und schläft jetzt endlich.)

* Wo sind bei sowas eigentlich die Geisteswissenschaften? Ich höre von Freunden immer mal wieder von beeindruckenden SchülerInnen, die auf höchstem Niveau über Shakespeare-Sonette diskutieren.  Wo gehen die dann hin? Trotzdem in das Chemie-Begabtenseminar?

** Wenn ich das höre, könnte ich natürlich gleich wieder anfangen, über den Zustand der Schulinformatik in BW zu lamentieren.  Oder soll ich mich freuen? Offensichtlich gelingt es immer noch jungen Leuten, sich für Informatik zu interessieren, obwohl das Fach am Gymnasium ein Schattendasein fristet und wohl auch weiterhin tun wird.  Aber das dürfen heute mal andere bedauern, wenn die Interessierten dann bei mir im Kurs landen 😉  (Wahrscheinlich jammere ich dann aber doch wieder, wenn ich sehe, dass der Kurs zum 100% aus jungen Männern besteht.  Ich wollte doch immer die Mädchen für das Fach begeistern… Ob ich das erleben darf?)

Musik ist hier Programm! (2)

(Dies ist Teil 2 der Serie „Musik ist hier Programm!“  – aber der erste mit richtig Musik und Code.  Die Einleitung gibt’s hier.)

Wenn Musikexperten über Musik (egal ob Klassik, Jazz oder Pop) sprechen, klingt das häufig ziemlich mathematisch: „Die 5. Stufe einer Moll-Tonleiter entspricht der 3. Stufe der parallelen Dur-Tonleiter“, „der C7/9/13-Akkord“, „die II-V-I-Verbindung“ (hier sogar mit römischen Zahlen!) usw.  Das liegt daran, dass Musik auf eine absolut faszinierende Weise kreative Freiheit mit mathematischer Regelhaftigkeit verbindet — und gerade in diesem scheinbaren Widerspruch liegt ein großer Reiz.

Auch wir fangen mathematisch an, nämlich indem wir die Halbtonschritte, aus denen die chromatische Tonleiter besteht, durchnummerieren.  Also: c=0, cis=1, d=2, dis=3, …, h=11, c (eine Oktave höher) = 12, usw.   Genauso macht das auch das MIDI-Protokoll (übersichtlich an einer Klaviatur dargestellt z.B. hier).

In Python können wir damit eine chromatische Tonleiter, d.h. 12 aufeinanderfolgende Halbtonschritte, ganz einfach so beschreiben:

chromatic_scale = range(13)

Mein Vorschlag wäre übrigens, dass ihr den interaktiven Python-Interpreter öffnet und die Beispiele direkt dorthin kopiert und ausführt.  Am Ende dieses Artikels findet ihr alle Definitionen auch nochmal am Stück.

Euer „Dialog“ mit dem interaktiven Interpreter könnte also ungefähr so aussehen (die letzte Zeile stellt die Ausgabe des Interpreters dar):

chromatic_scale = range(13)
list(chromatic_scale)
==> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

Für eine direkte MIDI-Ausgabe wäre das ja gar nicht schlecht… aber leider kann Lilypond mit Zahlen alleine noch nichts anfangen. Wir müssen unsere Zahlen also vor der Ausgabe in Notennamen umwandeln. Wie das Format für Notennamen von LilyPond aussieht, steht hier.

Für den Anfang bestimmen wir Notennamen und Oktavangabe mit der folgenden einfachen Funktion:

def midi2lily(pitch):
    names = ["c", "cis", "d", "dis", "e", "f", "fis", "g", "gis", "a", "ais", "b"]
    octave, semi = divmod(pitch, 12)
    octave_marker = "'" if octave > 0 else ","
    return names[semi] + abs(octave)*octave_marker

Mit einer List Comprehension können wir diese Funktion auf die gesamte chromatische Tonleiter anwenden:

[midi2lily(pitch) for pitch in chromatic_scale]
==> ['c', 'cis', 'd', 'dis', 'e', 'f', 'fis', 'g', 'gis', 'a', 'ais', 'b', "c'"]

Schön, schön. Bei der letzten Note sieht man auch, dass noch ein Apostroph angehängt wurde, weil dort eine neue Oktave beginnt. Die Funktion scheint also zu tun, was sie soll.

(Aber Achtung: Diese Funktion ist musikalisch oft nicht sinnvoll… z.B. sollte in F-Dur nicht ‚ais‘ verwendet werden, sondern ‚bes‘ (LilyPond-Notation für die Note „B“), damit nicht ein Ais (A mit Kreuzzeichen), sondern B (H mit B-Vorzeichen) geschrieben wird. Darum kümmern wir uns in der nächsten Folge.)

Indem wir nur bestimmte Töne aus der chromatischen Skala auswählen, können wir andere Tonleitern erzeugen. Das gehen wir bald systematisch an – für den Anfang können wir aber z.B. eine Ganztonleiter produzieren, indem wir nur jeden zweiten Halbton verwenden:

[midi2lily(pitch) for pitch in chromatic_scale if pitch % 2 == 0]
==> ['c', 'd', 'e', 'fis', 'gis', 'ais', "c'"]

Das sieht ja schon ganz gut aus!  Ein zweites Beispiel (unter Verwendung von itertools.chain):

from itertools import chain
motiv1 = [pitch for pitch in chromatic_scale if pitch % 2 == 0]
motiv2 = reversed(motiv1)
theme = chain(motiv1, motiv2)

[midi2lily(pitch) for pitch in theme]
==> ['c', 'd', 'e', 'fis', 'gis', 'ais', "c'", "c'", 'ais', 'gis', 'fis', 'e', 'd', 'c']

Ah, schön: Wir haben ein musikalisches Thema beschrieben, das aus einer aufsteigenden, gefolgt von einer absteigenden Ganztonleiter besteht.  Interessant daran ist v.a. die Art, wie wir das in Python ausgedrückt haben.  Das Thema besteht aus zwei Motiven, nämlich zuerst der Ganztonleiter und dann einer Wiederholung des ersten Motivs — aber rückwärts gespielt!  In der Musik nennt man so etwas „Krebs“. Indem wir das zweite Motiv mittels reversed(motiv1) definieren, können wir diese Krebs-Beziehung direkt und kompakt beschreiben.  Wir bewegen uns im Programm also auf einer viel höheren Abstraktionsebene als im späteren Notentext, wo der Zusammenhang zwischen den Motiven komplett verlorengeht.  Auch wenn das motiv1 ein anderes wäre —  motiv2 wäre immer dessen Krebs, denn wir haben nicht einzelne Noten definiert, sondern genau diese Beziehung zwischen den beiden Motiven.  Sehr spannend — und wir werden das noch viel weiter treiben!

Bisher erzeugen wir nur Python-Listen, die Notennamen enthalten.  Natürlich muss aus einer solchen Liste irgendwann ein String werden, der in einer Lilypond-Datei verwendet werden kann. Definieren wir uns also gleich mal:

def join(it):
    return " ".join(it)

Die folgende Zeile z.B. nimmt also jedes zweite Element der chromatischen Tonleiter, übersetzt es in einen Notennamen und fügt alle diese Namen zu einem String zusammen:

join(midi2lily(p) for p in chromatic_scale if p % 2 == 0)
==> "c d e fis gis ais c'"

Übrigens: Wer sich jetzt wundert, dass hier keine eckigen Klammern mehr vorkommen, d.h. die List Comprehension aus dem vorigen Beispiel irgendwie verschwunden ist, der hat gut beobachtet! join() wird hier mit einer „generator comprehension“ aufgerufen, d.h. es wird keine Liste, sondern ein Generator erzeugt, dessen konkrete Werte erst berechnet werden, wenn wirklich auf die einzelnen Elemente zugegriffen werden soll. Wer mehr über List Comprehensions und Generator Comprehensions wissen will, kann sich
ja mal diesen Artikel von Guido van Rossum himself anschauen oder auch diesen.

Bevor wir nun aber über Tonleitern und Akkorde nachdenken, sollten wir zuerst noch die Infrastruktur schaffen, um wirklich mit Lilypond Noten darstellen und sie als MIDI-Datei anhören zu können.  Die Ganztonleiter von gerade eben beispielsweise, müsste zumindest in die folgende Lilypond-Datei „verpackt“ werden:

\version "2.16.2"    % compatibility information for future LilyPond versions

\score {
{ c d e fis gis ais c'}

\layout { }

\midi { }
}

Diese Datei kann LilyPond dann verarbeiten und eine PDF-Datei erzeugen, die so aussieht:minimal-ausschnittHier ist vielleicht noch nicht alles, wie wir es uns vorstellen (wollten wir wirklich so tiefe Töne?), aber ein Anfang ist es allemal.

Wie bekommen wir unsere Daten also in das LilyPond-Format?  Ich benutze für so etwas gerne Pythons template strings. Damit bauen wir die Lilypond-Datei einfach nach, verwenden aber an den enscheidenden Stellen Platzhalter (hier z.B. $melody und $speed):

from string import Template

SIMPLE_LP_MELODY = """
\\version "2.16.2"   % compatibility information for future LilyPond versions

\\score {
{ $melody }

\\layout { }
\\midi { \\tempo 2 = $speed}
}
"""

Wir können das z.B. so benutzen:

>>> adict = dict(melody="c d e fis gis ais c'", speed=120)
>>> text = Template(SIMPLE_LP_MELODY).substitute(adict)
>>> print(text)

Auf Dauer noch hilfreicher wird das, wenn die Ersetzungen selbst wieder Platzhalter enthalten dürfen und wir dann (quasi rekursiv) so lange ersetzen, bis ein String ohne Platzhalter entstanden ist.  Das machen wir mit folgender Funktion:

def fill_template(tmpl, adict):
    previous = ""
    while tmpl != previous:
        previous = tmpl
        tmpl = Template(tmpl).safe_substitute(adict)
    return tmpl

Damit könnten wir im interaktiven Python Interpreter jetzt z.B. definieren:

motiv1 = [pitch for pitch in chromatic_scale if pitch % 2 == 0]
motiv2 = reversed(motiv1)
theme = chain(motiv1, motiv2)
melody = join(midi2lily(p) for p in theme)
speed = 120
text = fill_template(SIMPLE_LP_MELODY, locals())
print(text)

und erhalten als Ausgabe tatsächlich eine komplette LilyPond-Beschreibung:


\version "2.16.2"   % compatibility information for future LilyPond versions

\score {
{ c d e fis gis ais c' c' ais gis fis e d c }

\layout { }
\midi { \tempo 4 = 120}
}

Der obige Code enthält einen praktischen Python-Trick (an der Grenze zum Hack): Die Funktion locals() liefert ein Dictionary mit den lokal definierten Namen und ihren aktuellen Werten.  Wenn ich z.B. locals() in einer Funktion verwende, sind das alle dort definierten Variablen und die Aufrufparameter.  Im Klartext: Die Werte für die in SIMPLE_LP_MELODY verwendeten Platzhalter werden direkt aus den lokalen Variablen ermittelt, ohne dass wir dazu ein anderes Dictionary bauen müssen.  Wem das zu nahe an schwarzer Magie ist, der schreibt:

text = fill_template(SIMPLE_LP_MELODY, dict(melody=melody, speed=speed))

Egal in welcher Variante, die Variable text enthält nun eine sinnvolle Eingabe für LilyPond.  Also schnell in eine Datei damit:

def save_file(astring, fn="output.ly"):
    out_file = open(fn, "wt")
    out_file.write(astring)
    out_file.close()

save_file(text)

Damit wird der Text standardmäßig die Datei output.ly geschrieben.  Wenn wir LilyPond darauf loslassen (unter Windows z.B. so), erzeugt es für uns Noten (output.pdf)

ganztonund anhörbare Musik in output.midi.  Hat’s geklappt?  Die MIDI-Datei kann z.B. euer Webbrowser abspielen (mein Firefox zumindest kann es).  Leider kann ich sie aber weder bei wordpress.com noch bei soundcloud hochladen. Damit ihr unser erstes Musikstück anhören könnt, habe ich output.midi deshalb nach output.mp3 konvertiert:

Juhu, wir haben Musik produziert! Keine besonders schöne, zugegeben.  Ganztonleitern klingen irgendwie… seltsam.  Deswegen werden wir uns als Nächstes mit Tonleitern beschäftigen, die uns vertrauter sind: Dur, Moll, aber auch exotisch Klingenderes wie Phrygisch oder Mixolydisch (das ist z.B. die Tonart von Norwegian Wood) sind nur noch wenige Programmzeilen entfernt.

Aber das machen wir beim nächsten Mal.  Dieser Beitrag ist lange genug geworden und bietet hoffentlich schon einige Ansatzpunkte zum Experimentieren und Weiterdenken.  Da ich wegen der anstehenden Prüfungen hier mindestens zwei Wochen nicht weiterschreiben kann, könnt ihr euch ja gerne selbst schon mal überlegen, wie ihr  Tonarten modellieren würdet.  Es gibt unendlich viele Wege das zu tun.

Viel Spaß beim Ausprobieren! Über Kommentare, Fragen und Anregungen freue ich mich sehr.

Hier noch mal der vollständige Code, den wir heute entwickelt haben, inklusive des letzten Beispiels.  Diesen Code kann man so als Datei speichern und von Python3 ausführen lassen:

from string import Template

def midi2lily(pitch):
    names = ["c", "cis", "d", "dis", "e", "f", "fis", "g", "gis", "a", "ais", "b"]
    octave, semi = divmod(pitch, 12)
    octave_marker = "'" if octave > 0 else ","
    return names[semi] + abs(octave)*octave_marker

def join(it):
    return " ".join(it)

SIMPLE_LP_MELODY = """
\\version "2.16.2"   % compatibility information for future LilyPond versions

\\score {
  { $melody }

  \\layout { }
  \\midi { \\tempo 2 = $speed}
}
"""

def fill_template(tmpl, adict):
    previous = ""
    while tmpl != previous:
        previous = tmpl
        tmpl = Template(tmpl).safe_substitute(adict)
    return tmpl

def save_file(astring, fn="output.ly"):
    out_file = open(fn, "wt")
    out_file.write(astring)
    out_file.close()

## Beispiel
from itertools import chain

chromatic_scale = range(13)
motiv1 = [pitch for pitch in chromatic_scale if pitch % 2 == 0]
motiv2 = reversed(motiv1)
theme = chain(motiv1, motiv2)
melody = join(midi2lily(pitch) for pitch in theme)
speed = 120
text = fill_template(SIMPLE_LP_MELODY, locals())
save_file(text)

Musik ist hier Programm! (1)

(Alternativer Titel: „Musik machen mit Embee“ bzw.  „Komponieren durch Programmieren“  bzw. „Hilfe! Mein Computer will Musiker werden!“ bzw. „Harmonielehre am Computer“ bzw. „Vom Personal Computer zum Personal Composer“.  Sucht euch einen aus.)

Dies ist der Beginn einer Serie, in der ich mit euch Musik machen will.  Beziehungsweise: Eigentlich will ich, dass mein (bzw. euer) Computer die Musik macht — und wir bringen ihm bei, wie. Er soll lernen, was Töne, Tonleitern, Akkorde und Akkordverbindungen sind und er soll dieses Wissen nutzen um Musikstücke in Noten zu setzen, sie zu verändern, sie zu begleiten und — als Krönung — sie selbst zu komponieren.  Ob das mehr wird als Kakophonie, wird sich zeigen!

Bevor es losgeht, will ich ein paar Fragen beantworten (die mir natürlich niemand gestellt, sondern die ich mir selbst ausgedacht habe):

Für wen ist das hier gedacht?

Die Reihe richtet sich an alle, die sich für Musik und für Programmierung interessieren. Auf beiden Gebieten setze ich Grundkenntnisse voraus; weder soll das eine Einführung in die Musiktheorie noch ein Programmierkurs werden.  Ich gehe aber kleinschrittig und hoffentlich so anschaulich vor, dass es Spaß macht, mitzulesen, mitzudenken, die Musikbeispiele anzuhören, die Notenbeispiele anzusehen, v. a. aber die Programme selbst auszuprobieren und mit ihnen zu spielen.  Links zu ein- und weiterführenden Informationen versuche ich, wo immer möglich, einzubinden.

Warum sollte man sowas überhaupt wollen, ein Computerprogramm das Musik macht?

Mir persönlich würde als Antwort auf diese Frage ja schon ausreichen: Aus Neugierde! Um zu sehen, ob es möglich ist!  Um etwas zu lernen über Musik und über Programmierung!

Aber viele Leute fühlen sich von der Idee, mit dem Computer irgendeine Form von Kunst zu machen, richtiggehend abgestoßen.  Das äußert sich dann ungefähr so:

„Oh nein, was soll den der Mist? Ist Musik (und eigentlich alle Kunst) nicht in erster Linie Intuition, Emotion, Kreativität — und damit einem Computer gar nicht zugänglich?  Muss man denn alles Schöne durch Analyse, durch Automatisierung, durch Maschinen seines Zaubers berauben? Ich fand schon Gedichtinterpretationen in der Schule immer irgendwie pervers…“

Ich halte die Sache für etwas komplexer — und dadurch für viel spannender.  Aber den langen Beitrag, den ich dazu in der Schublade habe, lasse ich erstmal liegen.  Vielleicht können wir das ja in einiger Zeit diskutieren, wenn wir sehen, was wir überhaupt zustande bekommen.

Wird das etwas für die Schule?

Wohl eher nicht.  Die Programme, die wir entwickeln, werden nicht besonders umfangreich, aber doch anspruchsvoll werden. Für meine Schüler wäre das Niveau definitiv zu hoch; sie haben leider viel zu wenig Informatikunterricht.  Aber wer weiß? Vielleicht kann man mit Anpassungen in anderen Bundesländern, wo mehr Informatik möglich ist, durchaus was machen…  Fächerübergreifend… Ein Traum…

Welche Programmiersprache und Tools verwendest du?

Programmiert wird in Python.  Output unserer Programme werden Dateien sein, die die freie Notensatzsoftware LilyPond dann für uns in wunderschöne Noten übersetzt.  Weil Musik aber in erster Linie zum Hören da ist, erzeugen wir auch MIDI-Dateien (am Anfang lassen wir das einfach LilyPond für uns machen; später brauchen wir ein bisschen mehr Freiheit und machen es selbst).

Warum Python?

Python ist toll! Python-Code sieht aus wie Pseudocode und ist deshalb selbst für Leute nachvollziehbar, die selbst nicht in Python programmieren.  Python ist einfach, wenn etwas Einfaches ausgedrückt werden soll (im Gegensatz zu, sagen wir, Java) und macht einem auch bei komplexeren Aufgaben das Leben nicht unnötig schwer.

Wichtig für mich in diesem Projekt ist v. a. auch, dass Python eine funktionalen Programmierstil unterstützt: Funktionen können Parameter oder auch Rückgabewert anderer Funktionen sein — und das macht beim Beschreiben musikalischer Zusammenhänge sehr viel Sinn.  Z.B. werden wir die Tonika der Es-Moll-Tonleiter (es, ges, b) als Verknüpfung dreier Funktionen (Tonika, Es, Moll) beschreiben können.  Das wird sehr elegant, glaubt mir.  Im Vergleich zu ausschließlich funktionalen Sprachen (Lisp, Haskell, ML, …) bleiben wir mit Python aber immer im für Normalsterbliche nachvollziehbaren Rahmen.

Übrigens werden wir Python 3 verwenden.  Es gibt keinen zwingenden Grund dafür und die Codebeispiele sollten größtenteils auch unter Python 2 funktionieren bzw. sich leicht anpassen lassen.  Für mich war dieses Projekt aber der Anlass, endlich zu Python 3 zu wechseln.

Warum LilyPond?

Weil man Musik für LilyPond in einem textbasierten Format beschreibt, das relativ leicht programmatisch zu erzeugen ist.  (Aber auch als Mensch finde ich LilyPond zur Noteneingabe super.)

Geht’s jetzt mal endlich los?

Jawoll. Aber in einem neuen Eintrag.  Viel Spaß! Ich freue mich sehr über Kommentare, Fragen, Vorschläge…

Musik programmieren in einem guten neuen Jahr

Ich wünsche euch allen sehr nachträglich ein sehr gutes neues Jahr!

Mein Referendariat ist in seiner ganz heißen Phase angekommen.  Meine schrifliche „Dokumentation einer Unterrichtseinheit“ zur Einführung in die Programmierung mit Processing muss in wenigen Tagen fertig sein, die erste Prüfungslehrprobe steht direkt danach an und die Bewerbungsunterlagen sind auch schon bald fällig… Es brennt also gerade überall — daher keine Zeit zu bloggen. Leider.

Trotzdem… wenigstens dieses Video muss ich loswerden:

Faszinierend auf so vielen Ebenen — allerdings wahrscheinlich nur für ein recht kleines Zielpublikum.  Wer sich aber wohl fühlt in der Schnittmenge aus Musik und Informatik, sollte sich den Vortrag anschauen und anhören.

Ein bisschen musiktheoretischer Hintergrund ist hilfreich, aber nicht notwendig: Chris Ford fängt bei Sinuswellen an und erklärt den ganzen Rest! Clojure-Kenntnisse sind ebenfalls hilfreich, aber nicht zwingend. (Meine sind auch fast nur theoretischer Natur bisher, leider.)  Man muss den Code nicht verstehen, um zu spüren, dass die funktionale Denkweise der musikalischen sehr angemessen ist.

Als ich diesen Blog begonnen habe, schrieb ich, ich wolle hier auch von Overtone erzählen. Dazu komme ich wohl erst, wenn das Refendariat eine Weile hinter mir liegt – aber, was ich damals meinte, beschreibt dieses Video ziemlich genau.  (Mein eigenes Projekt auf Dauer wäre das Ganze noch mit einem Schuss KI — das war ja schließlich vor gar nicht langer Zeit mal mein Beruf…)

Und, was das neue Jahr betrifft, kann ich es nicht besser sagen als Neil Gaiman es seit Jahren tut:

„May your coming year be filled with magic and dreams and good madness. I hope you read some fine books and kiss someone who thinks you’re wonderful, and don’t forget to make some art — write or draw or build or sing or live as only you can. And I hope, somewhere in the next year, you surprise yourself.“

Christmas Carols

Am Wochenende war ich bei Freunden Christmas Carrols singen – und weil diese Freunde gleich um die Ecke in Babyfondistanz wohnen, sogar zusammen mit meiner Frau! Das gibt’s nur selten, dass wir gemeinsam sowas machen können. Dazu noch mit einer Gruppe guter Sänger, so dass – trotz stetem Glühweinfluss – auch vom Blatt alles gleich recht schön geklungen hat.

Ah, so mag ich die Weihnachtszeit. (Also, ehrlich gesagt, ich mag sie sowieso. Hm, das lässt sich bestimmt anhand meiner Kindheit erklären…)

“Christmas a humbug, uncle!“ said Scrooge’s nephew. „You don’t mean that, I am sure?“

Also ich meine das auf keinen Fall und wünsche Euch allen eine schöne Adventszeit!