# Tactul

Un lucru pe care il vei face adesea cand vei programa live va fi sa parcurgi in bucla liste circulare. Vei pune in aceste liste note pentru melodii, pauze pentru ritm, progresii ale acordurilor, variatii de timbru, etc.

## Tactul pentru liste circulare

Sonic Pi ofera o unealta foarte la indemana pentru folosirea listelor circulare in bucle live. Este sistemul de tact. In sectiunea despre listele circulare am discutat despre contorul care creste constant, la fel ca numarul bataii curente. Tactul implementeaza aceasta idee. El iti ofera posibilitatea de a parcurge listele circulare in ritm. Sa privim un exemplu:

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

Acesta este echivalent cu:

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

Aici am ales gama pentatonica E3 minor si redam fiecare element. Acest lucru este realizat adaugand ‘.tick’ la sfarsitul declaratiei gamei. Acest tact este local pentru bucla live, deci fiecare bucla poate avea tactul sau independent:

    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

## Tactul (tick)

Poti apela ‘tick’ la fel ca o functie standard si sa folosesti valoare ca index:

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

Totusi, e mai dragut sa apelezi ‘.tick’ la sfarsit. Functia ‘tick’ poate fi folosita cand vrei sa faci chestii exotice cu valoarea pentru tick si pentru cand vrei sa folosesti aceasta valoare pentru altceva decat pentru indexul dintr-o lista circulara.

## Look (priveste)

Partea magica legata de tick este ca nu reda doar un index nou (sau valoarea din lista de la indexul respectiv) ci are grija ca data viitoare cand apelezi functia sa intoarca valoarea urmatoare. Citeste exemplele din documentatia pentru ‘tick’ pentru mai multe moduri de a-l folosi. Totusi, pentru moment este important sa remarcam ca uneori ai putea dori sa vezi care este valoarea curenta fara sa o incrementezi. Acest lucru se poate face folosind functia ‘look’. Poti apela ‘look’ ca pe o functie standard sau adaugand ‘.look’ la sfarsitul listei circulare.

## Nume pentru tact

Uneori vei avea nevoie de mai mult de un tact intr-o bucla live. Acest lucru se poate realiza dandu-i un nume tactului:

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

Aici folosim doua tacturi, unul pentru nota care va fi redata si un altul pentru durata pauzei. Cum ambele sunt in aceeasi bucla live, pentru a le delimita trebuie sa le dam nume unice. Este la fel cu numele pentru buclele live - scriem un nume cu ‘:’ la inceput. In exemplul de mai sus am denumit un tact ‘:foo’ iar pe celalalt ‘:bar’. Daca vrem sa vedem valorile acestora trebuie sa transmitem numele tactului catre functia ‘look’.

## Nu complica lucrurile

Multe dintre avantajele sistemului de tacturi nu sunt evidente de la inceput. Nu incerca sa inveti totul din aceasta sectiune. Concentreaza-te pe tactul pentru o singura lista circulara. Asta iti va permite sa beneficiezi de cea mai mare parte din placerea de a folosi un tact pentru parcurgerea listelor circulare in buclele live.

Studiaza documentatia pentru ‘tick’ unde vei gasi multe exemple folositoare. Spor la ticait!