Sonic Pi

Sonic Pi logo

Johdanto

Sonic Pi:lla voit koodata musiikkia ja sitä voisi kutsua myös uudenlaiseksi musiikki-instrumentiksi, jolla voit luoda musiikkia vaikka live-tilaisuudessa (tätä kutsutaan livekoodaukseksi), tai tallentaa sen itsellesi jaettavaksi halutessasi. Se on asennettu valmiiksi Raspberry Pi -laitteisiin. Voit halutessasi ladata sen myös sekä Mac- että PC -tietokoneeseen. Sen voi ladata osoitteesta sonic-pi.net.

Tämän kurssin lähteenä on käytetty mm. ohjelmiston kehittäjän Sam Aaronin kirjaa ”CODE MUSIC WITH Sonic Pi”. Siinä on sisäänrakennettuna myös oma opetusohjelmansa, mutta kirjassa on laajemmin ohjeita ja esimerkkejä. Lisäksi inspiraation lähteenä on toiminut Let me hack it -verkkokurssi opettajille, johon osallistuin muutamia vuosia sitten.

Kurssin aikana kokeillaan monia erilaisia asioita, joita tämä ohjelmisto mahdollistaa. Tärkeintä on kuitenkin pitää hauskaa ja kokeilla kaikkea jännää, mitä sillä voi tehdä. Mennään siis koko ajan luovuus ja kokeilevuus edellä.

Alla ohjelmiston kehittäjä Sam Aaron näyttää sen uskomattomia mahdollisuuksia livekoodauksessa.

Varsinainen kurssin sisältö on jaettu viiteen ohjelmointikäsitteeseen, jotka löytyvät lähes kaikista ohjelmointikielistä. Tämän kurssin avulla voi siis myös opiskella ohjelmointia. Ohjelmointikäsitteet ja kurssinsisältö ovat:

  1. Lause
  2. Silmukka
  3. Ehtolause
  4. Muuttuja
  5. Lista

Lause

Ohjelmoinnissa lause on komento tai ohje, jonka ohjelmoija antaa tietokoneelle. Ohjelma rakentuu lauseista, joilla ohjelmoija antaa tietokoneelle käskyjä, joita tietokone sitten toteuttaa. Tietokoneohjelma koostuu siis joukosta lauseita.

Kommentteja käytetään selventämään ohjelmakoodia niin, että ihmiset ymmärtäisivät ohjelmaa paremmin. Yhden rivin kommentti aloitetaan # -merkillä. Useamman rivin kommentti aloitetaan ”’ -merkinnällä ja lopetetaan ”’ -merkinnällä aivan, kuten Python-kielessä. Sonic Pi:n pohjana on kuitenkin käytetty Ruby-ohjelmointikieltä.

Yhden rivin kommentti

Yhden rivin kommentti näyttää tältä Sonic Pi:ssa (kommentit ovat ihmistä varten, tietokone jättää ne huomioimatta):

Usean rivin kommentti

Usean rivin kommentti näyttää tältä Sonic Pi:ssa:

Yhden nuotin soittamisen käsky Sonic Pi:ssa

Käskyllä play 60 saa Sonic Pi:n soittamaan yhden nuotin. Ohjelma ajetaan joko painamalla ”run” tai näppäinkomennolla (Alt + R Windows- ja Linux -koneissa, Maceissä Cmd + R).

Äskeinen nuotti on pianon 4. oktaavin C-nuotti, josta käytetään myös nimeä yksiviivainen C tai keski-C. Saman nuotin voi soittaa Sonic Pi:lla myös käskyllä play :C4.

Taulukko nuoteista yhden oktaavin alueelta Sonic Pi:ssa

C Db D Eb E F Gb G Ab A Bb B
60 61 62 63 64 65 66 67 68 69 70 71
:C4 :Db4 :D4 :Eb4 :E4 :F4 :Gb4 :G4 :Ab4 :A4 :Bb4 :B4
  
Alennettu nuotti kirjoitetaan siis b:llä esim. :Db4. Vastaavasti ylennetty nuotti kirjoitetaan s:llä esim. :Ds4.
 
Jos kirjoittaa usean käskyn allekkain, soittaa Sonic Pi ne yhtä aikaa. Jotta nuotit soitetaan peräkkäin, pitää käskyjen väliin laittaa komento sleep ja sen kesto sekunteina esim. sleep 0.5 tarkoittaa puolen sekunnin odotusta. Sleep-komennon pituudella pystyy vaikuttamaan nuotin keston pituuteen. Tässä Ukko Nooan alku ensin samaan aikaan ja sitten peräkkäin.

Ukko Nooan nuotit samanaikaisesti soitettuna

Ukkon Nooan nuotit sleep komentojen avulla soi melodiana

Jaakko kulta melodiasta kaanoniksi Sonic Pi:lla

Jaakko kullan (Frère Jacques) melodia voidaan jakaa neljään fraasiin, joita sitten käytämme kaanonin luomiseen Sonic Pi:lla. Alla melodian neljä fraasia Sonic Pi:ssa C-duuriin transponoituna. Nuottien kestot on luotu sleep-komennoilla.

Kaanon 1. fraasi

Melodiassa jokainen fraasi toistetaan kahteen kertaan. 1. ääni aloittaa soittamalla fraasin kaksi kertaa.

Kaanon 2. fraasi

Seuraavaksi 1. ääni jatkaa 2. fraasiin ja samalla 2. ääni aloittaa 1. fraasista, jolloin saadaan kaksiääninen lopputulos tässä vaiheessa. Jotta 1. äänen melodiassa saadaan pidempi ääni aikaiseksi käytetään release-komentoa ja siihen lisättyä numeroa, joka kertoo äänen pituuden. Release saadaan fade out -efekti aikaiseksi eli ääni häipyy hiljalleen loppua kohti. Vastakkainen efekti saadaan aikaiseksi attack-komennolla. Tässä tapauksessa käytämme nuotin kanssa komentoa play :g4, release: 1. Olen esimerkeissä käyttänyt nuotin nimissä sekä isoja että pieniä kirjaimia, kirjaimen suuruus ei vaikuta lopputulokseen.

Kaanon 3. fraasi

Ensimmäinen ääni siirtyy 3. fraasiin, toinen ääni siirtyy 2. fraasiin ja 3. ääni aloittaa 1. fraasista.

Kaanon 4. fraasi

Ensimmäinen ääni siirtyy 4. eli viimeiseen fraasiin, toinen ääni 3. fraasiin, 3. ääni 2. fraasiin ja 4. ääni aloittaa ensimmäisestä fraasista. Alla 4. fraasi ilman kertausta.

Kaanonin jatko

Seuraavaksi 1. ääni lopettaa, koska pääsi melodian loppuun. Näin käy vuorotellen jokaisen äänen kohdalla, kunnes viimeiseksi jää 4. ääni soittamaan melodian loppuun.

Lisää muokkausmahdollisuuksia

Soiton nopeutta voi muuttaa komennolla use_bpm 60 (default on 60, joka kertoo siis pulssin minuutissa)

Käytettävän syntetisaattorin äänen saa muutettua komennolla: use_synth :beep (default on beep)

Äänen voimakkuutta voi muuttaa amp: 1 (1 on default-numero, sitä suurentamalla ääni kovenee ja pienentämällä vastaavasti hiljenee)

Luova haaste 1

Käytä tähän asti oppimiasi keinoja ja luo musiikkia Sonic Pi:lla.

Silmukka

Ohjelmoinnissa silmukalla saadaan tietokone toistamaan niiden sisälle koodattuja asioita. Sonic Pi:ssa silmukassa live_loop käskyjen do ja end välissä olevaa koodia toistetaan ikuisesti.

Alla sama koodi ilman kommentteja:

Koodia on helppo lähteä muuntelemaan. Muuttamalla sleep -käskyn jälkeistä sekuntimäärää saadaan ääninäyte soimaan nopeammin tai hitaammin pienentämällä tai suurentamalla sekuntimäärää.

Toinen helppo tapa lähteä muuntamaan koodia on samplen (ääninäytteen) muuttaminen joksikin toiseksi (tässä tapauksessa bd_ada vaihtui bd_fat:ksi):

Myös löylyn heitolla voi luoda musiikkia…

Muuttamalla arvoa rate: jälkeen saa efektiä muutettua mielenkiintoisella tavalla. Jos sen ottaa kokonaan pois, sää sample:n soimaan ilman muutoksia.

Monta silmukkaa samanaikaisesti

Sonic Pi:ssa saa monta silmukka toimimaan samanaikaisesti yksinkertaisesti lisäämällä enemmän kuin yhden live_loop:in.

Jaakko kulta -kaanon toteutettuna samanaikaisilla silmukoilla

Koodissa käytetään neljää kaanon live_loop silmukkaa: kaanon, kaanon2, kaanon3 ja kaanon4. Jokaisessa käytetään eri syntetisaattoria erottelun helpottamiseksi.

 

Luova haaste 2

Käytä tähän asti oppimiasi keinoja ja luo musiikkia Sonic Pi:lla silmukoita hyväksi käyttäen.

Ehtolause

Ohjelmoinnissa ehtolauseet mahdollistavat ohjelman toimimisen halutulla tavalla silloin, kun ehdot täyttyvät. Ehdot joko täyttyvät (true) tai eivät täyty (false). Jos ehto täyttyy, jotain tapahtuu. Ehtolauseilla voi siis haaroittaa ohjelman suoritusta. Ehtolauseita voi myös laittaa toistensa sisään ja näin tehdä monimutkaisempia haaroituksia.

Myös Sonic Pi:ssa voi käyttää ehtolauseita. Alla joitain esimerkkejä ehtolauseista Sonic Pi:ssa.

Satunnaisluvut

Sonic Pi:ssa on erilaisia satunnaislukumahdollisuuksia. Käytetään rrand satunnaislukua, ja siitä vielä rrand_i-versiota, joka valitsee kokonaisluvun (muuten se valitsisi desimaaliluvun). Satunnaisluvut ovat Sonic Pi:ssa aina pseudosatunnaislukuja, eli joka kerralla tulee sama sarja satunnaisuuksia. Se on kuitenkin käytännöllinen monessa tilanteessa. Seuraavassa lähdemme soittamaan satunnaismelodiaa C-duurissa.

Ensimmäisessä esimerkissä i:n (muuttuja) arvioksi on laitettu 1, joten joka kertaa tapahtuu sama asia ehtolauseessa (play :c4).

Seuraavaksi käytetään rrand_i:tä hyväksi valitsemaan numeroista 1-2 ja ehtolausetta hyväksi käyttäen annetaan niille soivat vastineet C-duurissa: joko toonika tai dominantti.

Seuraavaksi kasvatetaan satunnaisluvut välille 1-5 ja otetaan duuripentatoninen skaala käyttöön.

Seuraavaksi otetaan koko C-duuri käyttöön ja numerot 1-8. Lisäksi tehdään melodiasta mielenkiintoisempi muuttamalla sleep:in pituutta choose:in ja listan (siitäkin oma osuutensa kurssissa) avulla ja näin saaden eripituisia nuotteja aikaiseksi.

Luova haaste 3

Käytä tähän asti oppimiasi keinoja ja luo musiikkia Sonic Pi:lla ehtolauseita hyväksi käyttäen.

Muuttuja

Muuttuja (variable) on säilytyspaikka arvolle tietokoneen muistissa. Sonic Pi:ssa on helppo luoda muuttujia: annetaan muuttajalle nimi, sen jälkeen =, ja merkitään muuttujan arvo. Muuttujan arvo voi nimensä mukaisesti muuttua. Sonic Pi:ssa muuttujia käytetään ainakin kolmella eri tavalla:

  1. Kommunikoimaan ihmisille, mitä koodi tarkoittaa. Tämä tehdään antamalla muuttujalle kuvaava nimi, joka auttaa ymmärtämään, mitä koodissa tapahtuu juuri tuossa kohdassa. Esim. näin:

2. Välttämään turhaa toistoamista: riittää, kun asian muuttaa muuttujassa, niin se muuttuu kaikissa kohdissa, jossa muuttujaa käytetään. Seuraavassa esimerkissä tehdään live_loop duuriskaala, jossa sen sävelet muodostetaan juurta hyväksi käyttäen (siihen liitetään sävelaskeleen verran arvoa). Näin saadaan duuriskaala soitettua eri sävelistä vain juurta muuttamalla:

3. Lisäksi muuttujaan voi varastoida arvoja. Seuraavassa esimerkissä olen varastoitu kolmen kolmisoinnun sävelet niitä vastaaviin kirjaimiin.

Luova haaste 4

Käytä tähän asti oppimiasi keinoja ja luo musiikkia Sonic Pi:lla muuttujia hyväksi käyttäen.

Lista

Lista on työkalu, jolla voi varastoida suuren määrän informaatiota kerralla. Se voidaan määritellä muuttujaksi, jossa on toisia muuttujia sisällään. Lista koostuu numero-kohde pareista, niin että numerointi alkaa nollasta. Sonic Pi:ssa listan saa aikaiseksi laittamalla asioita pilkulla erotettuna hakasulkujen sisälle.

Siinä soivat C-duurin sävelet. Saman voi tehdä myös sävelten nimillä:

Listalle voi myös antaa nimen, kuten alla (C-duuri) ja hyödyntää sitä koodissa.

Luova haaste 5

Käytä tähän asti oppimiasi keinoja ja luo musiikkia Sonic Pi:lla listoja hyväksi käyttäen.