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 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.

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

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.

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).

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.

Mit Hilfe des Befehls „item n of list“ kann auf die einzelnen Werte innerhalb einer Tabellenzeile zugegriffen werden. Dadurch werden folgende Befehle abgearbeitet:
- Das Instrument wird gesetzt;
- Das Programm wartet eine vorgegebene Zeit.
- Der Ton wird für eine gegebene Zeitdauer abgespielt.
- 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.