Sonic Pi: Ringe erzeugen II

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