Podstawy programowania

Sonic Pi

Zadania na zajęciach

  1. Zmodyfikuj następujący program, tak by jeden z wątków wykonywał się dwa razy szybciej (nie modyfikuj instrukcji sleep):
    use_bpm 60
    
    live_loop :a do
      play :c4
      sleep 1
    end
    
    live_loop :b do
      play :e4
      sleep 1
    end
  2. Zmodyfikuj kod tak by pętle foo i bar wykonują się naprzemiennie:
    live_loop :foo do
      play :c4
      sleep 1
    end
    
    live_loop :bar do
      play :e4
      sleep 1
    end
    1. przez modyfikację i dodanie dodatkowych wywołań funkcji sleep
    2. przez modyfikajcę funkcji sleep i wykorzystanie parametru delay funkcji live_loop

    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, amp: 0.3
    play :e4, amp: 0.3
    play :g4, amp: 0.3
    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)

    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