Készíts egy dalt

Adj hozzá véletlenszerűséget

Nagyszerű! Most már jól sikerült futtatnod a dalt, folyamatosan ütemezve és basszussal ellátva, mellette van a dallam. Most valami igazán jó dolgot csinálunk, és felszabadítjuk a Sonic Pi valódi lehetőségeit. Adjunk hozzá néhány generáló elemet a számhoz, és programozzuk a számítógépet, hogy komponáljon nekünk!

Dobj egy kockát és transzponáld a dallamot!

A transzponálás azt jelenti, hogy a hangmagasságot felfelé vagy lefelé kell megváltoztatni. Időről időre véletlenszerűen transzponálhatjuk a dallamot, hogy adjunk némi fűszert a számhoz. Dobhatsz egy kockát, annak eldöntésére, mikor kell emelni a hangmagasságot a dallamhoz. Íme egy példa:

live_loop :melody do
  if one_in(6)
    use_transpose 2
  else
    use_transpose 0
  end
  play_pattern_timed [:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4], [0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], attack: 0, release: 0.2
end

Hozz létre egy véletlenszerű basszust

LCsináljunk valami érdekeset a basszus számára. A .choose utasítás használata egy praktikus módszer, amely véletlenszerűen választ ki egy elemet egy listából. Mint ez:

play [:c, :e, :g].choose

[:c, :e, :g] a hangjegyek listája (ebben az esetben a C-dúr akkord hangjegyei). .choose véletlenszerűen választja ki az egyik hangjegyet. Hangjegyek helyett bármi is szerepelhet a listában. Például a várakozási értékek:

loop do
  use_octave [0, 1].choose
  play [:c, :e, :g].choose
  sleep [0.25, 0.25, 0.5, 1].choose
end

Nem is kell emlékezned arra, hogy milyen hangok vannak az akkordokban. A Sonic Pi ezt kezelni tudja neked. A [:c, :e, :g], írása helyett használhatod ezt (chord :C, :major). Ez automatikusan létrehozza a megfelelő hangjegyek listáját. Íme egy példa:

loop do
  play (chord :c, :major).choose
  sleep [0.25, 0.25, 0.5, 1].choose
end

Használjuk ezt a varázslatot egy pezsgő basszushoz. Mentsd el munkádat, és másold át az aktuális :bass ciklust egy másik pufferbe, arra az esetre, ha vissza akarsz hozzá térni. Ezután hagyj helyet az új basszusnak, és töröld a ciklus tartalmát. Használjuk a klasszikus :tb303 szintetizátort, és játsszunk véletlenszerű 16-od hangjegyeket a C-dúr akkordból:

live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose
  sleep 0.25
end

Ajaj! Nem egészen igaz. Add hozzá a , release: 0.125 paramétert a lejátszási parancs végén, így:

live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose, release: 0.125
  sleep 0.25
end

Ez jobb, de még mindig kell egy kis csiszolás. Eddig az attack: és a release: paramétereket használtad a lejátszási parancshoz. Az alkalmazott szinetizátortól függően sokkal több paraméter használható. Például a tb303 szintetizátor 45 különböző beállítási lehetőséget kínál. A basszushoz használjuk a cutoff nevű paramétert. A cutoff eltávolítja az összes frekvenciát, amely a cutoff frekvencia felett van. 0-130 közötti értékeket használhatsz.

De ne csak egy rögzített küszöbértéket használj, ha véletlenszerű értékkel is rendelkezhetsz! Az rrand(min, max) segítségével véletlenszerű számokat generálhatsz egy adott tartományban. Próbáld ki ezt:

live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose, release: 0.125, cutoff: rrand(60, 110)
  sleep 0.25
end

Nagyszerű! Ne felejtsd felfedezni és kipróbálni a különböző dolgokat. Összefoglalva, itt van egy példa arra, hogy mik a további lehetőségek ettől a ponttól:

use_bpm 120

live_loop :drums do
  sample :drum_heavy_kick
  sleep 1
  sample :drum_snare_hard
  sleep 1
  sample :drum_heavy_kick
  sleep 1
  sample :drum_snare_hard
  sleep 1
end

live_loop :hihat do
  sample :drum_cymbal_closed
  sleep 0.25
  sample :drum_cymbal_pedal
  sleep 1
end

live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose, release: 0.125, cutoff: rrand(60, 110)
  sleep 0.25
end


live_loop :melody do
  if one_in(6)
    use_transpose 2
  else
    use_transpose 0
  end
  play_pattern_timed [:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4], [0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], attack: 0, release: 0.2
end