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
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¶
```ruby 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:
```ruby 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
```ruby
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.
```ruby 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¶
```ruby 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¶
```ruby 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¶
ruby
live_loop :flibble do
sample :ambi_choir, rate: 0.3
sample :bd_haus, rate: 1
sleep 0.5
end
Live-Loop mit Mix:
```ruby 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 ```