Muzyka algorytmiczna

Zajęcia 1 (2024-10-02)

Cel zajęć

  1. Instalacja środowiska programistycznego Sonic Pi
  2. Zapoznanie się z podstawowami języka Ruby
  3. Tworzenie prostych utworów z wykorzystaniem Sonic Pi

Zadanie (na 2024-10-9)

Przygotowanie krótkiego utworu (~30s) w środowisku Sonic Pi, spełniającego następujące wymagania:

  1. Wykorzystuje funkcje: live_loop, sleep, play
  2. Modyfikuje tworzone dźwięki przez dodatkowe parametry funkcji play (np. amp:)
  3. Wykorzystuje ten sam dźwięk w różnych oktawach

Przykładowe fragmenty kodu w Sonic Pi

Dźwięki z wykorzystaniem notacji

play :C4
sleep 1
play :E4
sleep 1
play :G4

Dźwięki określone liczbowo

play 60
sleep 1
play 64
sleep 1
play 67

Modyfikacja pojedynczego dźwięku

play :c4, attack: 1, decay: 1, sustain: 1, release: 1

Akord

play :c4
play :e4
play :g4
sleep 1

Zmiana oktawy dźwięku

play note(:c4, octave: 3)

Odczytanie globalnego tempa

print current_bpm

Zmiana globalnego tempa

use_bpm 180

Zmiana tempa w kontekście

with_bpm 180 do
  play :c4
  sleep 1
end

Zmiana globalnego syntezatora

use_synth :dsaw

(podobnie with_synth)

Dodatkowe kody zdefiniowane na zajęciach

Iteracja dźwięku przez oktawy

12.times do |oct|
  play note(:c4, octave: oct)
  sleep 1
end

Gra kolejno: :c0, :c1, :c2, ..., :c11

oct jest nazwą iteratora (zmieną pętli), może być dowolna inna. Sekcję |oct| można pomijać jeśli nie chcemy wykorzystywać licznika.

Odtworzenie 3 razy tego samego dźwięku

3.times do
  play :c4
  sleep 1
end

Dwie pętle działające równolegle

live_loop :foo do
  play :c4
  sleep 1
end

live_loop :bar do
  play :e4
  sleep 2
end

Gra kolejno: :c4 i :e4, :c4, :c4 i :e4, :c4 ...

Nazwy foo i bar są arbitralnie wybranymi nazwami.

Odtworzenie dźwięków zdefiniowanych w tablicy

for x in [:c4, :e4, :g4] do
  play x
  sleep 1
end

ADSR

play :c4, duration: 4
sleep 1
play :c4, attack: 1, attack_level: 0.5
sleep 1

play :c4, attack: 0, decay: 1, sustain: 1, release: 0
play :c4, attack: 0, decay: 1, sustain: 1, release: 0

Zatrzymanie pętli live_loop po 3 iteracjach

n = 0
live_loop :foo do
  if n == 3 then stop end
  n += 1
  play :c4
  sleep 1
end