Title: digi.komp8 Beispiel
Course: Sonic Pi - Vertiefung

Informatik, Musik

Sonic Pi - Vertiefung

9. Schulstufe

Aufgabe 1

Variablen

Genug "gejammt"? Dann gibt's hier noch ein paar Tipps, wie du noch mehr aus Sonic Pi rausholen kannst!

Einer der wichtigsten Bausteine von Programmcode sind Variablen. Du kennst sie sicher aus dem Mathematikunterricht unter wohlklingenden Namen wie x,y oder z. Dort ist ihr Wert meist unbekannt und du musst diesen herausfinden.

Beim Programmieren drehen wir den Spieß jedoch um: Wir schreiben z.B. einfach x = 50 und müssen uns nicht mehr überlegen, wofür x stehen könnte. Jetzt können wir x an einer anderen Stelle verwenden.

x = 50
play x
Okay, zugegeben, das hätten wir auch ohne x geschafft. Wofür brauchen wir dann überhaupt Variablen? Wenn dir etwas dazu einfällt, schreib es hier in "Zusatzaufgabe: Wozu Variablen?" hinein. Und wenn nicht, scroll einfach weiter ;)

Aufgabe 2

Wozu Variablen?

Fällt dir eine sinnvolle Anwendung für Variablen in Sonic Pi ein?

... aber nicht gleich weiterlesen, bevor du überhaupt darüber nachgedacht hast!

Zunächst ist es sinnvoll Variablen aussagekräftige Namen zu geben, denn ein guter Begriff sagt gleich viel mehr aus, als eine bloße Zahl! Wichtig ist nur, dass der Name einer Variable kein Leerzeichen beinhalten darf. Du kannst stattdessen den Unterstrich "_" verwenden.

hohe_Note = 59
tiefe_Note = 50
lang = 0.5
kurz = 0.25

play tiefe_Note
sleep lang
play hohe_Note
sleep kurz
play hohe_Note
sleep kurz
play tiefe_Note
sleep lang

Doch die bessere Lesbarkeit ist nicht der einzige Vorteil! Setze dazu die kurze Melodie in einen live_loop.

Zwischenfrage: Muss der obere Teil mit "hohe_Note = 59" usw. auch mit in den live_loop? Was passiert, wenn er innerhalb des Loops ist und was, wenn er außerhalb ist? Welche Möglichkeit findest du schöner?

Wenn du es geschafft hast, hörst du nun eine durchgängige Melodie. Verändere jetzt - wie es dir gefällt - die Werte der Variablen und drücke wieder ALT+R.

Du kannst also den Wert von Variablen im Nachhinein ändern und hörst sofort einen Unterschied. Das Praktische daran ist, dass überall, wo du die selbe Variable verwendest, der Wert sich mit ändert. Das macht es leichter, Dinge später zu verändern!

Das ist nicht der einzige Trick, den die Variablen drauf haben. Ist dir z.B. nur der letzte "sleep" Befehl zu kurz? Mach ihn einfach doppelt so lang, indem du schreibst:

sleep lang * 2

Doch der wirkliche "Special Move" der Variablen ist, dass du ihren Wert während der Ausführung des Programms ändern kannst (deshalb heißen sie ja auch variabel). Dazu weist du der Variable zunächst ihren eigenen Wert zu und addierst dann zB 1 dazu:

hohe_Note = hohe_Note + 1

Stelle diesen Befehl nun an das Ende deines Loops. Nun sollte der Ton bei jedem Durchlauf um eine Note höher klingen.

Falls es bei dir nicht funktioniert, hast du eventuell den oberen Block mit "hohe_Note=58" usw. innerhalb des Loops. Überlege dir, warum es in diesem Fall nicht egal ist, wo diese ersten Zuweisungen stehen!

Spiele nun die Stärken der Variablen aus und versuche z.B. auch die tiefe_Note oder die Sleep-Längen zu verändern. Oder du bastelst deinen eigenen Code mit Variablen!

Aufgabe 3

Bedingung

Ihr habt jetzt bereits einige erweiterte Grundkonzepte wie Variablen und Schleifen/Loops kennengelernt. Mit dem letzten Beispiel werden wir noch auf Bedingungen eingehen.
Dafür habt ihr hier folgendes Beispiel - kopiert dieses einfach in Sonic Pi und startet den Code.

Was passiert dabei?
Kurz nach jedem zweiten Schlag der Drum kommt auch ein zweiter Sound.
Und genau aus diesem Grund brauchen wir eine Bedingung - bestimmte Sounds sollen nur kommen, wenn eine bestimmte Bedingung erfüllt ist.
Diese Bedingung nennen wir einfach nur "if" mit dem englischen Wort für "falls".
Starten wir aber zuerst ganz am Anfang.

Wir haben bereits gelernt wie wir Variablen erstellen - ich nenne meine Variable jetzt einfach mal i und setze sie auf 1 (Zeile 1).
Mit dieser Variablen zähle ich einfach immer, ob ich gerade beim ersten oder beim zweiten Schlag bin. Am Anfang kommt der erste Schlag, daher einfach auf eins.

i=1

Danach kommt ein bereits bekannter Block mit einem Sample, der einfach von einem Effekt umgeben wird (with_fx).

with_fx :bitcrusher, mix: 0.4 do
    sample :bd_tek
    sleep 0.25
end

Jetzt kommt der neue Teil
Hier kommt die Abfrage if(i == 2), das heißt ganz einfach „falls i gleich 2, dann führe den folgenden Teil aus“. Danach kommt der Befehlsblock, wenn die Abfrage zutrifft und wir setzen i wieder auf 1, damit wir wieder beim ersten Schlag zu zählen beginnen.

if(i == 2)
   sample :drum_cymbal_closed, sustain: 0.125, release: 0.2
   sleep 0.25
   i=1

Wenn die Abfrage nicht zutrifft, kommt der else-Teil ins Spiel. Die ganze Bedingungsabfrage wird dann durch ein einfaches end geschlossen.

else
  sleep 0.25
  i=2
end

eine Bedingungsabfrage sieht also folgendermaßen aus:

falls x erfüllt, dann
Block 1
sonst
Block 2
Ende

Teste jetzt selbst, was du mit if und else anstellen kannst!

Aufgabe 4

Präsentation

Verwende jetzt alles was du gelernt hast, um dein eigenes musikalisches Projekt zu realisieren. Falls du während der vorigen Einheiten bereits eine Idee hattest, kannst du an dieser weiterarbeiten. Wenn du Hilfe brauchst, wende dich an deine Lehrerin/deinen Lehrer!

Wenn du fertig bist, speichere dein Projekt unter deinem Namen ab und frage deine Lehrerin/deinen Lehrer wie du es abgeben sollst.

Jetzt ist Showtime! Zeig den anderen, was du mit Sonic Pi geschaffen hast und höre dir die Tracks deiner Kolleginnen und Kollegen an.