Ringe sind sehr wichtige Elemente bei der Arbeit mit Sonic Pi. Im Artikel Ringe erzeugen Teil 1 haben wir die Methoden ring
, range
, knit
, bools
und spread
zur Erzeugung von Ringen vorgestellt.
In diesem Beitrag geht es um weitere Funktionen zur Produktion von Ringen, nämlich scale
und chord
. Wie die Namen vermuten lassen, arbeiten diese drei Funktionen musikalisch.
scale
Die Funktion scale liefert Tonleitern. Das erste Argument ist der Grundton, das zweite einen Skalennamen wie :major
(Dur), :minor
(Moll) oder :chromatic
. Sämtliche Skalennamen liefert eine Auswahlliste. Im folgenden Codebeispiel liefert scale :c3, :minor
einen Ring, der die Töne einer C-Dur-Tonleiter enthält:
tonleiter = scale :c3, :minor use_synth :piano live_loop :leiterspieler do play tonleiter.tick sleep 0.5 end
Die Option num_octaves
steuert die Anzahl der Oktaven, im folgenden läuft die Tonleiter entsprechend über zwei Oktaven:
tonleiter = scale :c3, :minor, num_octaves: 2 use_synth :piano live_loop :leiterspieler do play tonleiter.tick sleep 0.5 end
chord
Die Funktion chord arbeitet sehr ähnlich: statt Tonleitern liefert sie Akkorde. Das erste Argument ist wie gehabt der Grundton, das zweite Argument der Akkordname – auch hier hilft eine Auswahlliste.
Das nächste Beispiel speichert drei Major 7 Akkorde mit den Grundtönen C, D und E. Im live Loop werden die Akkorde dann mit der Funktion play_pattern_timed
abgespielt – diese Funktion erwartet an erster Stelle einen Ring mit Tonhöhen, an zweiter Stelle einen Ring oder eine einzelne Zahl für die Pausen zwischen den Noten. Zu beachten ist Zeile 11: der zweite Durchlauf des dritten Akkordes geht rückwärts, denn akkord3.reverse
liefert eine Kopie des Ringes akkord2
in umgekehrter Reihenfolge. Das ist eine sogenannte Verkettungsfunktion – bald mehr dazu auf diesem Blog!
akkord1 = chord :c3,:major7 akkord2 = chord :d3,:major7 akkord3 = chord :e3,:major7 use_synth :piano live_loop :akkordspieler do play_pattern_timed akkord1, 0.25 play_pattern_timed akkord2, 0.25 play_pattern_timed akkord3, 0.25 play_pattern_timed akkord3.reverse, 0.25 end