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
endHer 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
endHer 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
endOg 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
endStart med ticking, slipp deg løs!