Hangok generálása

Jelölés

Emlékszel a chordutasításra? A chord függvény megadja egy bizonyos akkord hangjegyeit:

play (chord :c, :major).choose
# egy véletlenszerű hangot játszik le a C-dúr skáláról (:c, :e vagy :g)

Van még egy léptéknek nevezett függvény: scale. A scale az összes hangot egy skálán adja vissza, nem csak az akkordban szereplőket:

play (scale :c, :major).choose
# véletlenszerű hangot játszik a C-dúr skáláról (: c,: d,: e,: f,: g,: a vagy: b)

A choose segítségével véletlenszerű elemet szerezhetsz egy listából. Ha strukturáltabb módon szeretnéd áttekinteni az értékeket, akkor arra a Sonic PI nagyon hathatós függvénnyel rendelkezik, amelyet tick-nek hívnak:

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

Itt az E3 pentaton skálát megfogjuk, és megjelöljük minden elemen. Ezt úgy végezzük el, hogy egy .tick utasítást adunk a skála meghatározásának végéhez. Ez a jel az aktuális a live loop-hoz tartozik, tehát minden live loop-nak megvan a saját önálló jele:

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

Körök

Megjelölhetsz bármit, ami kör (nos, listákat is kitűzhetsz, de akkor megáll, ha a végére ér). A Ring gyűrű/kör egy speciális lista, amely újra kezdődik, amikor a végére ér. Az előző példához hasonlóan a skála az utolsó hangjegy elérése után ismét az elejétől kezdődött. A scale és a chord visszaadja a kört. Előfordulhat, hogy létrehoz egy listát, és azt körré alakítja a .ring hívásával vagy a ring készítő használatával:

puts [1, 2, 3, 4].ring #=> (ring 1, 2, 3, 4)
puts (ring 1, 2, 3, 4) #=> (ring 1, 2, 3, 4)
live_loop :arp do
  play [:c, :e, :d, :f].ring.tick, release: 0.1
  sleep 0.125
end

Itt egy kicsit összetettebb példa. Itt van egy lista vagy akkordok, amelyek körré alakulnak és bejelölhetők:

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

Tegyél rá egy vezető dallamot:

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

Kezd a jelölést, vadulj!