W tej sekcji przyjrzymy się bardzo przydatnej strukturze danych - liście. Spotkaliśmy ją na krótko już wcześniej w sekcji poświęconej randomizacji kiedy to wybieraliśmy z listy losowe nuty do zagrania:
play choose([50, 55, 62])
W obecnym rozdziale zobaczymy jak możemy wykorzystać listy również
do reprezentacji akordów i skal. Na początku jednak spróbujmy sobie
przypomnieć w jaki sposób możemy zagrać akord. Pamiętasz, że jeśli
nie użyliśmy polecenia sleep
, to wszystkie dźwięki zagrają
jednocześnie:
play 52
play 55
play 59
Spróbujmy przyjrzeć się innym sposobom, za pomocą których możemy wyrazić powyższy kod.
Jedną z opcji jest umieszczenie wszystkich nut w liście [52, 55 , 59]
.
Nasza poczciwa funkcja play
jest wystarczająco bystra by wiedzieć
w jaki sposób ma zagrać listę nut. Spróbuj tego:
play [52, 55, 59]
Ooh, taki kod jest dużo przyjemniejszy do czytania. Zagranie listy nut, nie blokuje Ci korzystania z żadnego z parametrów:
play [52, 55, 59], amp: 0.3
Oczywiście, możesz również używać tradycyjnych nazw nut zamiast korzystania z liczb MIDI:
play [:E3, :G3, :B3]
Teraz Ci z Was, który mieli farta i studiowali trochę teorii muzycznej mogą zauważyć, że to jest akord E Minor zagrany na 3-ciej oktawie.
Innym bardzo przydatną cechą list jest możliwość wyciągnięcia z nich informacji. Może to brzmieć odrobinę dziwnie, ale nie jest to nic bardziej trudnego niż to gdy ktoś prosi Cię o to abyś przeszedł książce na stronę 23. Korzystając z listy, mógłbyś zapytać, jaki element znajduje się na 23 pozycji? Jedyną dziwną rzeczą w programowaniu jest to, że numery takich pozycji (indeksy) zazwyczaj zaczynają się od 0 a nie od 1.
Indeksy w listach nie są odliczane przez 1, 2, 3… Zamiast tego odliczamy 0, 1, 2…
Przyjrzyjmy się temu trochę bardziej. Spójrz na taką listę:
[52, 55, 59]
Nie ma w niej nic specjalnie strasznego. Teraz pytania, jaki jest
drugi element w tej liście. Tak, zgadłeś, jest to 55
. To było proste.
Sprawdźmy, czy możemy poprosić komputer aby odpowiedział nam na
to pytanie:
puts [52, 55, 59][1]
Dobrze, to wygląda trochę dziwnie, jeśli jeszcze nigdy nie widziałeś
niczego takiego. Zaufaj mi jednak, to nie jest trudne. W powyższej linii
są 3 części: słowo puts
, nasza lista 52, 55, 59
oraz nasz indeks
[1]
. Najpierw mówimy puts
ponieważ chcemy aby Sonic Pi wyświetlił
nam odpowiedź w panelu logowania (po prawej stronie). Następnie, przekazujemy
do tego polecenia naszą listę i na końcu nasz indeks, który pyta nas
o drugi element. Musimy otoczyć nasz indeks w nawiasy kwadratowe,
a ponieważ liczenie zaczynamy od 0
, to indeks dla drugiego elementu
to 1
. Spójrz:
# indeksy: 0 1 2
[52, 55, 59]
Spróbuj uruchomić kod puts [52, 55, 59][1]
a zobaczysz, że liczba
55
pojawi się w panelu logowania. Zmień indeks 1
na inne wartości,
spróbuj użyć dłuższych list i pomyśl w jaki sposob mógłbyś użyć listy
w twojej kolejnej zabawie kodem. Na przykład, jakie muzyczne struktury
mogą być reprezentowane jako seria liczb…