Lag lyder
Husker du chord
? Chord funksjonen gir deg tonene i en gitt akkord:
play (chord :c, :major).choose
# spiller en tilfeldig tone fra c-dur akkorder (:c, :e eller :g)
Det er også en funksjon som heter scale
. Den gir deg alle notene i en skala, ikke bare de som er i en akkord:
play (scale :c, :major).choose
# spiller en tilfeldig note fra C-dur skalaen (:c, :d, :e, :f, :g, :a or :b)
Med choose
får du et tilfeldig element fra en liste. Hvis du vil gå igjennom alle verdiene i en liste på en mer strukturert måte har Sonic PI en veldig kraftig funksjon som heter tick
:
live_loop :arp do
play (scale :e3, :minor_pentatonic).tick, release: 0.1
sleep 0.125
end
Her bruker vi bare femtoneskalaen E3-moll og går igjennom hvert element. Det gjør vi ved å legge på .tick på slutten av skaladeklarasjonen. Ticken gjelder bare inne i live-loopen, så hver live loop kan ha sin egen, uavhengige tick:
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
Du kan også ticke igjennom alt som er en ring (eller, du kan ticke gjennom lister også, men de slutter når du kommer til slutten). En ring er en spesiell liste som starter på nytt når du kommer til slutten. Akkurat som i det forrige eksempelet der skalaen starter på nytt etter den har kommet til den siste tonen. scale
og chord
er begge ringer. Noen ganger vil man gjøre om en liste til en ring, det kan du gjøre ved å skrive .ring
eller lage den direkte med ring
som vist under:
puts [1, 2, 3, 4].ring #=> (ring 1, 2, 3, 4)
puts (ring 1, 2, 3, 4) #=> (ring 2, 2, 3, 4)
live_loop :arp do
play [:c, :e, :d, :f].ring.tick, release: 0.1
sleep 0.125
end
Her er et litt mer sammensatt eksempel. Vi har en liste av akkorder som vi gjør igjennom til en ring og ticker igjennom:
live_loop :keys do
use_synth :blade
play [(chord :Ab, :major7), (chord :Db, :major7), (chord :Bb, :minor7), (chord :Eb, '7')].ring.tick, attack: 0.1, release: 1
sleep 1
end
Og til slutt kan vi legge på en melodi:
live_loop :keys do
use_synth :blade
play [(chord :Ab, :major7), (chord :Db, :major7), (chord :Bb, :minor7), (chord :Eb, "7")].ring.tick, attack: 0.1, release: 1
sleep 1
end
live_loop :lead do
use_synth :dsaw
play (scale :Ab, :major, num_octaves: 3).mirror.tick, attack: 0.05, release: 0.25, cutoff: rrand(80, 110), amp: 0.5
sleep 0.25
end
Start med ticking, slipp deg løs!