Vaihe 1
Tutki Sonic Pi:n sampleja.
Soita ainakin yksi ääni joka kategoriasta!
Soita ainakin yksi ääni joka kategoriasta!
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.
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ä.
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.
Voit myös käyttää alalaidassa olevan apupaneelin Samples välilehteä
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
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.
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ä:
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!
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.
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.
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ä.
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
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.