Mehrstimmige Musik mit Snap!

Die blockbasierte Programmiersprache Snap! bietet verschiedene Möglichkeiten, Musik während der Programmausführung abzuspielen. Beispielsweise ist das Abspielen von Samples möglich. Dieser Beitrag beschreibt, wie man die interne Tonerzeugung nutzen kann, um mehrstimmige Musik zu programmieren.

Grundlagen

Grundlage der Musikprogrammierung sind die folgenden fünf Blöcke:

Mit diesen fünf Befehlen kann in Snap! ein eigenes Musikstück komponiert werden.

Mit dem Block „Tempo“ kann das Tempo des Musikstücks angegeben werden, wodurch eine Anpassung später einfach möglich ist.

Mit dem „Volumen“ wird die Lautstärke eines Tons festgelegt. Dies ist insbesondere bei mehrstimmigen Arrangements wichtig, da sich die einzelnen Töne sonst aufaddieren können und es möglicherweise zu einer Übersteuerung kommt, welche zu Störgeräuschen führt.

Beim „Instrument“ stehen die Grundvarianten Sinus (1), Rechteck (2), Sägezahn (3) und Dreieck (4) zu Verfügung, wobei Typen mit abruptem Wechsel des Signals (z.B. Rechteck) eher zu Klängen mit mehr Obertoncharakteristik führen.

Mit „Play note“ kann ein Ton der Klaviatur für eine mit „Beats“ angegebene Tonlänge bezogen auf das vorgegebene Tempo abgespielt werden.

Mit „Rest“ wartet das Programm eine vorgegebene Zeit (abhängig) von den Tempoeinstellungen.

Einfache Melodie

Eine einfache Melodie kann abgespielt werden, indem einfach eine Reihe von Tönen aneinandergereiht wird.

Das Beispiel spielt die ersten vier Töne des Kanons „Bruder Jakob“ ab.

Mehrstimmigkeit

Das Abspielen eines ganzen Akkords ist möglich, indem man mehrere zeitgleich abspielt. Dies funktioniert über den Launch-Befehl:

Da alle Töne gleichzeitig abgespielt werden, entsteht ein Akkord.

Polyphonie

Um Mehrstimmigkeit zu erreichen, ergänzen wir die das Abspielen eines Tones innerhalb des Launchblockes mit einem weiteren Befehl, welcher dem Programm mitteilt, ab welchem Zeitpunkt dieser Ton gespielt werden soll. Dazu verwenden wir den „Rest“-Befehl.

Bei diesem Beispiel werden die Töne nicht nur unterschiedlich lang gespielt, sie beginnen auch zu jeweils unterschiedlichen Zeitpunkten.

Musikdaten aus Liste auslesen

Das obige Beispiel zeigt, dass es schnell unübersichtlich wird, wenn man jeden einzelnen Ton über einen separaten Launchbefehl starten muss. Deshalb ist es sinnvoll, die einzelnen Töne in eine Liste zu verpacken und diese Liste zu benutzen, die Launchblöcke zu starten.

Eine entsprechende Liste lässt sich am schnellsten in einer Tabellenkalkulation erstellen und kann dann im CSV-Format in Snap! importiert werden (einfach auf die Programmoberfläche ziehen).

Jede Zeile enthält einen Ton mit entsprechenden Angaben zu den Tönen.

In der Spalte A steht jeweils die Tonhöhe. Die Spalte B gibt an, ab welchem Zeitpunkt ein Ton gespielt wird. Die Spalte C gibt die Tonlänge an und die Spalte D wählt das Instrument aus.

Das folgende Programm liest die CSV-Datei in eine Snap!-Liste (bruder_jakob) ein und arbeitet diese dann zeilenweise ab.

Jeder einzelne Ton wird ab einem vorgegebenen Zeitpunkt mit einer bestimmten Tonhöhe so lange wie angegeben abgespielt.

Mit Hilfe des Befehls „item n of list“ kann auf die einzelnen Werte innerhalb einer Tabellenzeile zugegriffen werden. Dadurch werden folgende Befehle abgearbeitet:

  1. Das Instrument wird gesetzt;
  2. Das Programm wartet eine vorgegebene Zeit.
  3. Der Ton wird für eine gegebene Zeitdauer abgespielt.
  4. Das Programm wartet, bis der Ton fertig gespielt wurde.

Damit wird das Abspielen eines mehrstimmigen Kanons mit Noten unterschiedlicher Länge und mit maximal vier verschiedenen Instrumentenfarben möglich.

Link zum fertigen Beispiel: Polyphonie mit mehreren Instrumenten

Verwendung im Unterricht

Das Programm kann im Musikunterricht verwendet werden, wenn Schülerinnen und Schüler sich mit Computermusik beschäftigen. Es kann aber auch Teil eines Projekts werden, bei denen die Lernenden Musikelemente in Multimediaprojekte (beispielsweise Computerspiele) einbinden wollen.

Darüber hinaus zeigt das fertige Beispiel ein wichtiges Prinzip der Informatik auf, nämlich die Trennung von ausführendem Programm und darin zu bearbeitenden Daten. Durch den Import weiterer Notendateien (in CSV-Format), kann das gleiche Programm zum Abspielen ganz unterschiedlicher Musikstücke verwendet werden.