Cykanie

Coś, co na pewno będziesz robił dość często podczas kodowania na żywo, to iterowanie przez pierścienie. Będziesz wrzucał nuty do pierścieni dla tworzenia melodii, czasów uśpienia dla rytmów, progresji akordów, różnych wariacji barw dźwięku itd.

Cykające Pierścienie

Sonic Pi udostępnia bardzo przydatne narzędzie do pracy z pierścieniami w żywych pętlach live_loop. Nazywa się to systemem cykania. Udostępnia Ci możliwość cykania przez pierścienie. Spójrzmy na następujący przykład:

counter = 0
live_loop :arp do
  play (scale :e3, :minor_pentatonic)[counter], release: 0.1
  counter += 1
  sleep 0.125
end

Jest to odpowiednik dla:

live_loop :arp do
  play (scale :e3, :minor_pentatonic).tick, release: 0.1
  sleep 0.125
end

Wzięliśmy tu pentatoniczną skalę E3 moll i cykamy przez każdy jej element. Dokonaliśmy tego przez dodanie polecenia .tick na końcu deklaracji skali. Każde cyknięcie jest lokalne dla danej żywej pętli, więc każda żywa pętla może posiadać swojego własnego niezależnego cykacza:

live_loop :arp do
  play (scale :e3, :minor_pentatonic).tick, release: 0.1
  sleep 0.125
end
live_loop :arp2 do
  use_synth :dsaw
  play (scale :e2, :minor_pentatonic, num_octaves: 3).tick, release: 0.25
  sleep 0.25
end

Cyknięcie

Możesz również uruchomić polecenie cyknięcia tick jako standardową funkcję i używać zwracanej wartości jako indeksu:

live_loop :arp do
  idx = tick
  play (scale :e3, :minor_pentatonic)[idx], release: 0.1
  sleep 0.125
end

Jednakże dużo ładniej jest korzystać z polecenia .tick dodanego na końcu. Funkcja tick jest stworzona dla sytuacji gdy chcesz zrobić coś fantazyjnego z wartością zwracaną przy cyknięciu oraz wtedy, gdy chcesz używać cyknięć do innych rzeczy niż indeksowania elementów pierścieni.

Look (z ang. podejrzeć)

Magiczną rzeczą w cykaniu jest to, że masz możliwość nie tylko zwrócić nowy indeks (albo wartość znajdującą się w pierścieniu pod tym indeksem). Mechanizm ten pilnuje też, aby przy każdym Twoim kolejnym cyknięciu była to kolejna wartość. Zerknij na przykłady znajdujące się w dokumentacji dla polecenia tick, by zobaczyć wiele różnych sposobów na pracę z nim. Jednakże na tę chwilę ważne jest zaznaczenie tego, iż czasami będziesz chciał po prostu podejrzeć aktualną wartość cyknięcia bez zwiększania jego wartości. Możesz tego dokonać za pomocą funkcji look. Masz również możliwość uruchomienia polecenia look jako standardowej funkcji lub poprzez dodanie .look na końcu pierścienia.

Nazwane Cyknięcia

Finalnie czasami będziesz potrzebował więcej niż jednego cykacza dla danej żywej pętli. Można tego dokonać poprzez nadanie Twojemu cyknięciu nazwę:

live_loop :arp do
  play (scale :e3, :minor_pentatonic).tick(:foo), release: 0.1
  sleep (ring 0.125, 0.25).tick(:bar)
end

Powyżej używamy dwóch cykaczy, jednego dla zagrania nuty i drugiego dla odliczania czasu uśpienia. Jako że oba znajdują się w tej samej żywej pętli, potrzebowaliśmy nadać im unikalne nazwy, aby sprawić, by były oddzielne. To jest dokładnie taki sam mechanizm, jak w przypadku żywych pętli (live_loop) - po prostu przekazujemy symbol poprzedzony dwukropkiem :. W powyższym przykładzie nazwaliśmy pierwszego cykacza :foo, a drugiego :bar. Jeśli chcemy podejrzeć aktualną wartość któregoś z nich za pomocą polecenia look, to musimy do polecenia look również przekazać nazwę konkretnego cykacza.

Nie twórz zbyt skomplikowanych rzeczy

Większość mocy zawartej w systemie cykania nie jest przydatna, gdy dopiero zaczynasz. Nie próbuj i nie ucz się wszystkiego z tego rozdziału. Postaraj skupić się na cykaniu przez pojedynczy pierścień. To powinno dać Ci największą satysfakcję oraz prostotę związaną z cykaniem przez pierścienie w Twoich żywych pętlach.

Zerknij do dokumentacji na polecenie tick, gdzie znajdziesz wiele przydatnych przykładów. Wesołego cykania!