In diesem Abschnitt werden wir uns eine sehr nützliche Datenstruktur ansehen - die Liste. Wir hatten schon einmal in dem Abschnitt über Zufälligkeit kurz mit ihr zu tun, als wir die zu spielenden Noten zufällig aus einer Liste ausgewählt haben:
play choose([50, 55, 62])
In diesem Abschnitt erforschen wir, wie wir Akkorde und Skalen mit Listen darstellen können. Zuerst rufen wir uns wieder in Erinnerung, wie wir einen Akkord spielen könnten. Erinnere dich, dass ohne sleep
alle Töne zur gleichen Zeit gespielt werden:
play 52
play 55
play 59
Lass uns weitere Möglichkeiten ansehen diesen Programm-Code zu schreiben.
Eine Möglichkeit ist, alle Noten aus einer Liste heraus abzuspielen: [52, 55, 59]
. Unsere freundliche Funktion play
ist schlau genug, um zu wissen, wie man eine Liste von Noten abspielt. Probiere es aus:
play [52, 55, 59]
Oh, das lässt sich schon viel besser lesen. Eine Liste von Noten abzuspielen hindert dich nicht daran, alle Parameter so zu verwenden wie sonst auch:
play [52, 55, 59], amp: 0.3
Natürlich kannst du auch die traditionellen Notennamen anstelle der MIDI-Nummern verwenden:
play [:E3, :G3, :B3]
Die Glücklichen unter euch, die ein wenig Musiktheorie gelernt haben, haben den Akkord vielleicht erkannt: Es ist E-Moll, gespielt in der 3. Oktave.
Ein weiteres sehr nützliches Merkmal von Listen ist, dass man die in ihnen enthaltenen Informationen auslesen kann. Das klingt vielleicht etwas eigenartig, aber es ist nicht komplizierter, als eine Person zu bitten Seite 23 in einem Buch aufzuschlagen. Eine Liste fragst du einfach, was das Element mit der Indexnummer 23 ist. Das einzig seltsame in diesem Fall ist , dass beim Programmieren Indizes üblicherweise bei 0 beginnen - nicht bei 1.
Listen-Indizes zählen wir also nicht 1, 2, 3 … sondern 0, 1 ,2 …
Lass uns das im Detail ansehen. Sieh dir diese Liste an:
[52, 55, 59]
Nichts besonders Beängstigendes. Was ist das zweite Element in dieser Liste? Natürlich, es ist 55
. Das war einfach. Lass uns sehen, ob wir nicht auch den Computer dazu bringen können, die Frage für uns zu beantworten:
puts [52, 55, 59][1]
OK, das sieht etwas seltsam aus, wenn du so etwas noch nie gesehen hast. Aber vertrau mir, es ist nicht allzu schwer. Die Zeile oben besteht aus drei Teilen: dem Wort puts
, unserer Liste 52, 55, 59
und unserem Index [1]
. Zuerst sagen wir puts
, weil wir wollen, dass Sonic Pi die Antwort für uns ins Protokoll schreibt. Als nächstes übergeben wir unsere Liste, und am Ende fragen wir mit dem Index nach dem zweiten Element in der Liste. Den Index müssen wir mit eckigen Klammern umschließen, und da das Zählen mit 0
beginnt, ist die Index-Zahl für das zweite Element 1
. Schau:
# indexes: 0 1 2
[52, 55, 59]
Versuche mal, den Programm-Code puts [52, 55, 59][1]
auszuführen, dann wirst du sehen, dass 55
im Protokoll erscheint. Ändere den Index 1
in andere Indizes, probiere längere Listen aus - und denke darüber nach, wie du Listen einsetzen könntest, wenn du demnächst Code live programmieren und damit jammen willst. Zum Beispiel, welche musikalischen Strukturen könnten als eine Reihe von Zahlen geschrieben werden …