Zum Inhalt

Programmieren mit SonicPi

Was ist SonicPi

SonicPi ist ein modernes Kompositionsprogramm. Damit bietet SonicPi eine Möglichkeiten, sich selbst mittels Programmieren auszudrücken. SonicPi kann man schneller lernen als ein klassisches Musikinstrument.

Höre dir zum Beispiel auf deren Internetseite das Beispiel Listen to crazy coded beats an.

Demonstrationen, wie man mit SonicPi Musik programmiert:

Demonstration on RubyDay 12:45-20:00

Beispiel Industial-Beat

Demonstration von Sam Aaron

Man kann mit SonicPi auch Minecraft programmieren: Seite 29 und 53 in der Anleitung Essentials.

Erste Schritte

  • Wenn der Kopfhörer nicht funktioniert, das Programm neu starten, während die Kopfhörer bereits eingesteckt sind.
  • Im Programm selbst sind Anleitungen und Beispiel-Code vorhanden.
  • In den neueren Versionen (ab Version 3) gibt's die Anleitung auf Deutsch.
  • Der “Ausführen“-Button ist der Run-Button.
  • Mit einem “freien Buffer“ ist ein Workspace gemeint.
  • Mit Alt-Minus kannst du den Code kleiner darstellen lassen.
  • Mit Alt-A kannst du den ganzen Code auswählen, mit Alt-V die Zwischenablage einfügen.
  • Als erste Komposition dient vielleicht eine einfache Melodie?
  • Das Speichern funktioniert nicht immer reibungslos, deswegen solltest du deinen Quellcode in einer Text-Datei speichern.

Töne erzeugen

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
play_pattern [61, 62, 63]

play 61
sleep 1
play 62
sleep 0.5
play 63

# Oder mit den klassischen Notenbezeichnungen
play :C
play :C4
play :Cs4 # erhöht um einen Halbton
play chord(:C4, :minor)

Es gibt einige Optionen:

1
2
3
4
5
6
7
play 60, amp: 0.5  # Für die halbe Amplitude (Lautstärke)
play 60, pan: -1   # Spielt bei Stereo-Lautsprechern den Klang links (Richtung)

play 61, attack: 0.5, sustain: 1, release: 0.5  # Wie der Ton klingen soll
# attack für die Zeit bis zur maximalen Lautstärke
# sustain wie lange das Maximum gehalten wird
# release dann bis zur minimalen Lautstärke

Um Töne besonders klingen zu lassen verwendet man Synths

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
use_synth :saw
play 38
sleep 0.25
play 50
sleep 0.25
play 62
sleep 0.25

use_synth :prophet
play 38
sleep 0.25
play 50
sleep 0.25
play 62
sleep 0.25

# Weiter Synths: :dsaw :fm :tb303 :pulse

Samples

Mit sample können vorinstallierte oder auch eigene Samples (in Anführungszeichen den vollen Pfad angeben) im Format *.wav oder *.aiff verwendet werden.

1
2
3
4
5
sample :loop_amen
sample :loop_amen, rate: 0.5 # probiere 1.5 und -1 (Strecken und Stauchen; Geschwindigkeit)

sample :loop_amen, start: 0.5
sample :loop_amen, finish: 0.5

Schleifen und Zufallszahlen

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
loop do
  play rrand(50, 95)
  sleep rrand(0.2, 2)
end

5.times do
    sample :ambi_lunar_land
    sleep 5
end

2.times do
    use_synth :tb303
    play chord(:A3, :minor)
    sleep 2
    play chord(:C4, :minor)
end

# Parallele Töne erzeugt man mit:
in_thread do
  loop do
    sample :drum_heavy_kick
    sleep 1
  end
end
loop do
  use_synth :fm
  play 40, release: 0.2
  sleep 0.5
end

Effekte

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
with_fx :reverb do # Hall
  play 50
  sleep 0.5
  sample :elec_plip
  sleep 0.5
  play 62
end

with_fx :echo do # Echo
  play 50
  sleep 0.5
  sample :elec_plip
  sleep 0.5
  play 62
end

Live-Loop

1
2
3
4
5
live_loop :flibble do
  sample :ambi_choir, rate: 0.3
  sample :bd_haus, rate: 1
  sleep 0.5
end

Live-Loop mit Mix:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
live_loop :guit do
  with_fx :echo, mix: 0.3, phase: 0.25 do
    sample :guit_em9, rate: 0.5
  end
#  sample :guit_em9, rate: -0.5
  sleep 8
end
live_loop :boom do
  with_fx :reverb, room: 1 do
    sample :bd_boom, amp: 10, rate: 1
  end
  sleep 8
end

Weitere Tutorials