Musiikki ja ohjelmointi

Johdanto

Tämän luvun tehtävässä opit käyttämään sampleja, eli lyhyitä äänitiedostoja looppien tekemiseen. Loopit, eli jatkuvat toistorakenteet, ovat tavanomainen elementti musiikissa mutta myös olennainen osa ohjelmointia. Looppeja voi ajatella myös laajemmin osana arjen ääniä, jolloin niitä alkaa löytyä kaikkialta: Hälytysäänet, koneiden äänet tai vaikka kaupungin äänimaiseman vaihtuminen päivän kuluessa. Se milloin looppi voidaan käsittää musiikkina on pitkälti kiinni sen toistumisen taajuudesta, mutta myös kuulijan kekseliäisyydestä!


Kokeilit mahdollisesti edellisessä tehtävässä toistorakennetta

5.times do
  #jotain tapahtuu
end

koodiblokin avulla. Tässä tehtävässä käytät samankaltaista rakennetta sillä erotuksella, että toisto tapahtuu siihen asti kunnes se pysäytetään. Kun jotain ääntä toistaa tasaisesti, se menettää nopeasti alkuperäisen merkityksensä. Huomio siirtyy rytmeihin ja äänenväriin äänen alkulähteen tunnistamisen sijaan. Opit myös muokkaamaan ääniä ja luomaan erikoisiakin looppeja, joille keksit uusia merkityksiä.

Tärkeintä tehtävässä ei ole suunnitelmallinen tekeminen musikaalisen lopputuloksen aikaansaamiseksi, vaan kokeilu ja huvittelu käytännön tekemisen kautta.

Samplejen käyttö

Samplet ja niiden toistaminen

Aloitetaan tutustumalla Sonic Pi:n sampleihin.

Samplen toistaminen tapahtuu lähes samalla lailla kuin nuotin soittaminen play-komennon avulla. Play komennon sijaan käytetään sample-komentoa. Kun painat komennon jälkeen väilyöntiä, esiin tulee  pudotusvalikko. Nämä ovat Sonic Pi:n mukana tulevia äänitiedostoja. Voit valita jonkun näistä joko nuolinäppäimillä ja enterillä tai klikkaamalla haluamaasi vaihtoehtoa hiirellä.

Samplen valinta

Kun painat tämän jälkeen run, kuulet valitsemasi äänen. Samplen nimeä edeltää kaksoispiste, aivan kuten nuotin nimeäkin. Kaksoispiste on Sonic Pi:n tapa kertoa, että kyseessä on symboli. Symbolilla viitataan tässä tapauksessa äänitiedostoon. 

Jos et näe pudotusvalikkoa varmista että olet valinnut komennoksi juuri sample Sonic Pi:ssa on komentoja jotka alkavat sample_ Nämä ovat kuitenkin eri komentoja vaikka näyttävät samalta!

Samplet ovat ryhmitelty kategorioittain, joka käy ilmi samplen nimestä. Voit lajitella sampleja kategorian perusteella kirjoittamalla ensin kaksoispisteen ja sen jälkeen haluamasi kategorian.

Samplen kategoriat

Voit myös käyttää alalaidassa olevan apupaneelin Samples välilehteä

sample välilehti
Vaihe 1
Tutki Sonic Pi:n sampleja.
Soita ainakin yksi ääni joka kategoriasta!

Samplet ja rytmi

Sleep komento toimi samplen kanssa samalla tavalla kuin playn kanssa. Huomaa kuitenkin, että sleep tekee välin vain samplejen alkamisajan välille eikä esimerkiksi lopeta sen toistamista jos kyseessä on pitkä sample. Tempon vaihtaminen use_bpm komennolla ei vaikuta samplen pituuteen, mutta vaikuttaa sleepin pituuteen.

sample :ambi_lunar_land
sleep 1
sample :bass_woodsy_c
sleep 1
Vaihe 2
Kopioi ylläoleva esimerkki Sonic Pi:hin. Huomaatko miten samplet soivat päällekkäin, mutta eivät samaan aikaan? Valitse seuraavaksi kaksi tai kolme sinulle mieleistä samplea ja erottele ne sleep komennon avulla haluamallasi tavalla. Saatko mahdollisesti jonkun rytmin aikaiseksi?
Vinkki: Hulluttele vapaasti ja kokeile tehdä rytmi jostain ihan oudoista äänistä!

Looppaus

Samplet ja toisto

Loopin tekeminen Nyt kun sinulla on muutaman samplen mittainen kuvio, voit laittaa sen toistumaan eli looppaamaan. Helpoin ja hauskin tapa tehdä looppi Sonic Pi:lla on live_loop, joka toimii lähes samalla tavoin kuin aiemmin käytetty toistorakenne. 

Vaihe 3
  1.  Aloita kirjoittamalla komento live_loop ennen riviä, josta haluat aloittaa toiston. Huomaa alaviiva sanojen välissä!

  2. Jokainen live_loop tarvitsee oman nimen joka alkaa kaksoispisteellä. Nimeä käytetään eri live_looppien tunnistamiseen, ja voit käyttää nimenä mitä haluat.

  3. Tämän jälkeen kirjoita vielä do. Tämä kertoo Sonic Pi:lle loopin alkamispaikan. 

  4. Jokaisen live_loopin sisällä tulee olla ainakin yksi sleep

  5. Lopuksi, kirjoita end uudelle riville sen rivin jälkeen, johon haluat toiston päättyvän.

live loopin laitto

 

live_loop :nimi do
  sample :ambi_lunar_land
  sleep 1
  sample :bass_woodsy_c
  sleep 1
end

Mahtavaa! Nyt sinulla on looppi, joka toistuu siihen asti kunnes painat ylärivin stop painiketta. Live looppien yksi parhaista puolista on se, että voit tehdä niihin muutoksia niiden ollessa käynnissä! Voit esimerkiksi muuttaa toistettavaa samplea tai taukojen pituutta ilman, että loopin tarvitsee pysähtyä. Kokeile käytännössä:

Vaihe 4

Loopin muokkaaminen lennossa

  1. Käynnistä looppi
  2. Muuta aluksi yhtä loopin sleep-arvoa
  3. Paina run
  4. Lisää nyt looppin uusi sample ilman että lopetat toistoa
  5. Paina run

Onneksi olkoon! Olet juuri live-koodannut. Loopin muuttaminen lennossa on loistava tapa kokeilla asioita, sillä lopputulos on kuultavissa lähes välittömästi. Muista vain painaa run sen jälkeen kun olet tehnyt muutoksia koodiisi!


Samplen muokkaaminen

Samplen toistonopeuden muokkaaminen

Sonic Pi:n sampleista saa helposti irti vaikka minkälaisia ääniä muuttamalla äänen toistonopeutta ja -suuntaa. Kaikki tämä tapahtuu rate nimisen parametrin avulla. Parametrit ovat peruskomennoille (kuten play ja sample) annettavia lisäkomentoja, joilla voit muokata niiden toimintaa.

Vaihe 5
  1. Lisää sample rivin loppuun pilkku ja paina välilyöntiä
  2. Pudotusvalikko ilmestyy. Nämä ovat parametrejä, jotka vaikuttavat sample komentoon. Kirjoita rate:, tai valitse se vaihtoehto pudotusvalikosta painamalla enter. Huomaa kaksoispiste sanan lopussa.
  3. Anna rate:lle arvo. Oletusarvo on 1, joten kokeile joko isompaa tai pienempää.
  4. Paina run kuullaksesi muutoksen. Muista, ettei sinun tarvitse pysäyttää koodia!
option asettaminen

Huomasit varmaan, että yhtä pienemmät arvot soittavat samplen hitaammin ja yhtä suuremmat nopeammin. Kun puolitat arvon, myös toistonopeus puolittuu. Kokeilitko mitä tapahtuu jos antamasi arvo onkin negatiivinen? Toistonopeus on suoraan verrannollinen toistetun ääneen taajuuteen. Jos toistonopeus tuplataan, ääni nousee oktaavilla. Jos taas toistonopeus puolitetaan, ääni laskee oktaavilla.

Idearuutu

Mitä äänen taajuudelle tapahtuu jos rate on joku tietty murtoluku? Jos haluat käyttää murtolukuja, sinun täytyy käyttää ainakin toisessa numerossa desimaalilukua, muuten Sonic Pi pyöristää luvun automaattisesti.

Kokeile esimerkiksi seuraavaa:

sample :ambi_glass_rub
sample :ambi_glass_rub, rate: 3.0/2

tai

sample :ambi_glass_rub
sample :ambi_glass_rub, rate: 5.0/4

tai jopa

sample :ambi_glass_rub
sample :ambi_glass_rub, rate: 3.14159265359/2

Kun kuuntelet alkuperäistä samplea samaan aikaan sinun on helpompi kuulla raten vaikutus äänen korkeuteen. Eri kokonaisluvut saavat aikaan eri intervalleja. Lisää tietoa aiheesta löydät täältä (varoitus: linkki vie todella syvälle)

Parametrejä on myös mahdollista ketjuttaa toistensa perään. Jos haluat esimerkiksi muuttaa toistonopeuden lisäksi myös amplitudia eli äänenvoimakkuutta, lisää pilkku parametrin arvon jälkeen ja kirjoita uusi parametri. 

sample :glitch_perc4, rate: -1, amp: 0.75

Lisää tietoa eri parametreista löydät esimerkiksi täältä.


Kommentointi

Koodin kommentointi on hyvä tapa! Jos jaat koodisi muille, kommenttien avulla nämä ymmärtävät, mitä ohjelmassa tapahtuu. Useimmiten kommenteista on hyötyä myös itselle - ei ole aina ihan helppoa muistaa, mitä ohjelmoidessa on kulloinkin ajatellut!

    #Kirjoita kuvauksesi näin
    #Hauska tietää: ohjelmoinnissa näitä kutsutaan kommenteiksi.
    #Nimensä mukaisesti ne ovat viestejä tai muistiinpanoja, jotka helpottavat
    #koodin tulkintaa tai taustoittavat sitä. 
    #Ruby-ohjelmointikielessä risuaita kertoo mistä kommentti alkaa
    #Kommenttia ei tarvitse erikseen päättää
    live_loop :looppi do
      sample :ambi_choir, rate: -1 #kommentti voi alkaa mistä vain
      sleep 2
    end

Satunnaisuutta tulevaisuudesta

Satunnaisuus

Loopit kuulostavat helposti todella mekaanisilta kun kaikki toistokerrat ovat täsmälleen samanlaisia. Mitä jos haluaisitkin looppiisi jotain luonnollisemman kuuloista ääntä, jossa pientä vaihtelua tapahtuu koko ajan?

Voit lisätä satunnaisuutta rand-komennolla. Jos kirjoitat vain rand, Sonic Pi arpoo numeron nollan ja ykkösen väliltä

    live_loop :basari_random do
      sample :drum_bass_hard, amp: rand #äänenvoimakkuus satunnainen 0-1 välillä
      sleep 0.5
    end

Voit myös päättää maksimiarvon kirjoittamalla komennon perään sulkeet ja sulkeiden sisään maksimiarvon. Esimerkiksi rand(0.1) arpoo lukuja 0 ja 0.1 välillä

    live_loop :kuoro do
      sample :ambi_choir, rate: 0.5+rand(0.1)
      #0.5 rateen lisätään luku 0.0-0.1 välillä
      sleep 1
    end

Jos haluat päättää sekä alkamis- että päättymisarvon, voit käyttää rrand(pienin, isoin) komentoa. (huomaa kaksi r-kirjainta) Esimerkiksi rrand(-1,1) arpoo lukuja -1 ja 1 välillä.

    live_loop :kaaoksen_kauppiaat do
      sample :perc_till, rate: rrand(-1,1)
      #toistaa samplea satunnaisesti eri korkeuksilta sekä etu- että takaperin
      sleep 0.5
    end

Minkä tahansa numeron voi Sonic Pi:ssa korvata rand tai rrand komennolla. 

Tulevaisuuden ääni

Vaihe 6
Hio looppiasi vielä käyttämällä parametreja, lisäämällä sampleja ja hyödyntämällä satunnaisuutta kunnes saat aikaan sinua kiinnostavan äänen. Mieti mikä tulevaisuuden asia voisi saada tämän toistuvan äänen aikaiseksi. Onko se kenties joku työ, laite tai jotain ihan muuta?