Vaihe 1
Käytä listaa live_loopissa ja luo ainakin muutaman soinnun kierto
Tämän luvun tehtävässä tutustut listoihin ja muuttujiin sekä käytät näitä ohjelmoinnin rakenteita oman algoritmisen sävellyksen luomiseen.
Musiikin häkkäämisestä saattaa ensimmäisenä tulla mieleen jonkin olemassa olevan kappaleen remiksaaminen eli siitä uuden biisin tekeminen. Remiksaus onkin hyvä tapa lähestyä häkkäämisen konseptia musiikissa - otetaan jotain olemassa olevaa, muokataan sitä ja tehdään siitä oman kuuloinen. Vaikka remiksaaminen liitetään usein elektroniseen musiikkiin, sen taustalla olevat häkkäämisen konseptit eivät ole mitenkään uusia. Säveltäjät ovat kautta historian tehneet muunnelmia toistensa töistään, sekä häkkäilleet omaa materiaaliaan uuteen uskoon.
Algoritmi on ohje siitä miten jokin asia suoritetaan tai ongelma ratkaistaan. Perinteisessä säveltämisessä tämä algoritmi voisi olla nuotit, jotka kertovat muusikolle miten kappale soitetaan alusta loppuun - ohjeet "ongelman" ratkaisemiseksi.
Algoritmisessa säveltämisessä jokin algoritmi päättää mitkä nuotit soitetaan ja miksi. Algoritminen säveltäminen ei sinänsä edellytä tietokoneen käyttämistä sillä algoritmi voi olla hyvinkin yksinkertainen. Algoritmi voi esimerkiksi pyytää soittajaa valitsemaan satunnaisen nuotin c-duurisoinnusta ja soittamaan sitä neljä tahtia. Tässä tapauksessa satunnaisen valinnan tekee soittaja. Valinnan voi myös tehdä jokin ulkoinen tekijä, kuten noppa. Esimerkiksi Mozart tiettävästi sävelsi musiikillisen pelin, jossa soittaja muodostaa sävellyksen valmiiksi sävelletyistä palasista noppaa heittämällä.
Algoritminen sävellys liittyy olennaisesti häkkäämiseen. Musiikin teoriaa voi ajatella musiikin sääntöinä joita säveltäjän tai ohjelmoijan algoritmit häkkäävät jonkin musikaalisen lopputuloksen aikaansaamiseksi. Mozartin tapauksessa algoritmi oli yksinkertainen, mutta sisälsi valtavan määrän ennalta sävellettyä materiaalia.
Listat ovat yksi ohjelmoinnin perusrakenteista. Ne ovat tapa ryhmitellä samankaltaista tietoa yhteen paikkaan. Musiikin kontekstissa lista voi esimerkiksi tarkoittaa joidenkin tiettyjen nuottien yhdistelmiä kuten sointuja tai asteikkoja. Kokeile seuraavaa:
live_loop :soinnut do
play [60,65,69], release: 2
sleep 2
play [62,65,70]
sleep 1
play [60,65,69], release: 2
sleep 2
play [60,64,67]
sleep 1
end
Play komennolle annetaan nyt yhden arvon sijaan lista arvoja -
kolmisointuja! Sonic Pi:ssa listat merkitään hakasulkein ja listojen
sisältö, eli listan elementit eritellään pilkkujen avulla. Esimerkissä
elementit ovat numeroita, mutta ne voisivat yhtä hyvin olla esimerkiksi
nuottien nimiä [:c, :e, :g]
Listan käyttämisellä on monia etuja. Esimerkiksi parametrit vaikuttavat nyt kaikkiin listan elementteihin. Play komennon kanssa käytettävät listat myös säätävät äänenvoimakkuutta automaattisesti listan koon mukaan.
Listat ovat erittäin hyödyllinen työkalu algoritmisen musiikin
säveltämisessä. Sen sijaan, että soittaisit kaikki listan sävelet samaan
aikaan voit käskeä Sonic Pi:ta valitsemaan listasta satunnaisen arvon
uuden komennon avulla! Kirjoita vain listan perään .choose
live_loop :valitsija do
play [60,65,69].choose
sleep 2
play [62,65,70].choose
sleep 1
play [60,65,69].choose
sleep 2
play [60,64,67].choose
sleep 1
end
Tässä ylempänä olevan koodin soinnuista valitaan aina yksi sävel.
Kokeile soittaa tämä samaan aikaan ylemmän loopin kanssa. Koska melodia pohjautuu nyt sointujen säveliin ne sopivat varmasti yhteen.
Kaksi looppia samalla äänellä ja samalta sävelkorkeudelta kuulostavat
helposti todella samanlaisilta. Saat helposti vaihtelua
käyttämällä use_synth
komentoa.
Voit käyttää choosea valitsemaan mistä tahansa listasta yhden elementin. Voit esimerkiksi antaa sleepille muutaman mahdollisen vaihtoehdon listan avulla ja valita niistä yhden .choose komennolla.
sleep [1,0.5].choose
Voit myös valita käytettävän syntikan satunnaisesti:
use_synth [:saw, :square].choose
Koodia kirjoittaessa pyritään usein välttämään turhaa toistoa. Asioiden mekaaninen toistaminen ei ole kovin mielekästä puuhaa eikä myöskään tehokasta. Katso seuraava koodi:
live_loop :soinnut do
play [60,65,69]
sleep 2
play [62,65,70]
sleep 1
play [60,65,69]
sleep 2
play [60,64,67]
sleep 1
end
live_loop :nuotit do
use_synth :saw
play [60,65,69].choose
sleep 2
play [62,65,70].choose
sleep 1
play [60,65,69].choose
sleep 2
play [60,64,67].choose
sleep 1
end
Koodissa soinnut tukevat satunnaista melodiaa. Koodi toimii, mutta siinä on muutama ongelma:
Ensinnäkin, molemmissa loopeissa on täysin samat soinnut kirjoitettuna. Mitä jos haluaisit vaihtaa ensimmäisen soinnun joksikin toiseksi? Sinun täytyy tehdä muutoksia molempiin looppeihin! Kahden loopin kanssa tämä ei ole vielä kovin työlästä, mutta mitä jos looppeja onkin 10?
Toiseksi, melodian sopivuus harmoniaan on riippuvainen rytmistä. Jos haluaisit esimerkiksi arpoa .choose komennolla sleep-arvoja melodialle, menevät soinnut ja melodia ristiin. Joskus tämä voi olla kiinnostava efekti - joskus taas korviariipivä.
Tarvitsemme siis keinon, jolla saada tieto soitettavasta soinnusta jaettua live_loopien kesken!
Ohjelmoinnissa tiedon tallentaminen ja uudelleenkäyttö tapahtuu muuttujien avulla.
sointu = [60, 65, 69]
Muuttujaa voidaan ajatella paikkana johon jokin asia tallennetaan ja
jota voidaan käyttää myöhemmin uudelleen. Yläpuolella on määritelty
muuttuja nimeltä sointu
. Muuttujan nimi voi olla mikä tahansa mutta
usein on järkevää antaa niille kuvaavat ja helposti muistettavat
nimet. Muuttujan sisältö määritellään = merkillä. Nyt muuttuja sisältää
listan nuoteista joka voidaan toistaa esimerkiksi play komennon avulla.
sointu = [60, 65, 69]
play sointu
sleep 1
sointu = [61,66,70]
play sointu
Muuttujan sisällön voi muuttaa yksinkertaisesti antamalla sille uuden arvon. Toinen play komento toistaa uuden muuttujan sisällön ilman että itse play komennolle tarvitsee tehdä mitään!
Sonic Pi:n live_loop
it ovat hieman kuin soittajia jotka eivät
oikeastaan tiedä yhtään mitä muut soittajat tekevät. Looppien
ulkopuolella oleva muuttuja sointu
on kuitenkin tietoa, johon kaikki
live_loop
it pääsevät käsiksi, ja osaavat siksi soittaa yhdessä samassa
sävellajissa.
Nyt kun sinulla on muuttuja kappaleessa käytettävää sointua varten voit käyttää sitä missä tahansa live_loopissa.
sointu = [60,65,69]
live_loop :harmonia do
play sointu
sleep 1
end
live_loop :melodia do
#valitse yksi ääni muuttujaan tallennetusta soinnusta
play sointu.choose, release: 0.5
sleep 0.5
end
Nyt molemmat live_loopit soittavat muuttujan määrittelemää sointua, mutta itse sointu pysyy koko ajan samana.
Voit muuttaa aikaisemman sointuja soittaneen live_loopin, koko biisin
sointuja vaihtavaan live_loopiin helposti. Sen sijaan että soittaisit
soinnun play-komennolla, käytä looppia määrittämään muuttujalle sointu
uusi arvo:
live_loop :sointukierto do
sointu = [60,65,69]
sleep 2
sointu = [62,65,70]
sleep 1
sointu = [60,65,69]
sleep 2
sointu = [60,64,67]
sleep 1
end
Nyt tämä looppi määrittää kappaleessa käytettävän soinnun ja muut live_loopit seuraavat perässä! Huomaa, että looppi ei itsessään pidä ääntä!
Algoritminen sävellyksesi saattaa nyt näyttää joltain tämän kaltaiselta:
sointu = [60,65,69]
live_loop :sointukierto do
sointu = [60,65,69]
sleep 2
sointu = [62,65,70]
sleep 1
sointu = [60,65,69]
sleep 2
sointu = [60,64,67]
sleep 1
end
live_loop :harmonia do
use_synth :piano
play sointu
sleep 1
end
live_loop :melodia do
#valitse yksi ääni muuttujaan tallennetusta soinnusta
play sointu.choose, release: 0.5
sleep 0.5
end
Helppo tapa erottaa melodia harmoniasta on nostaa eli transponoida
se oktaavilla. Komento use_octave
tekee juuri tämän! Komennolle
annetaan parametriksi numero, joka kertoo transponoinnin määrän.
Positiiviset arvot nostavat oktaavia ja negatiiviset laskevat:
live_loop :melodia do
#soita melodia oktaavia korkeammalta
use_octave 1
#valitse yksi ääni muuttujaan tallennetusta soinnusta
play sointu.choose, release: 0.5
sleep 0.5
end
Muista, että voit käyttää .choose komentoa myös oktaavin valintaan kun laitat sen listan sisälle!
use_octave [0,1,2].choose
Sonic Pi on täynnä erilaisia komentoja. Olet varmaan huomannut miten ohjelma ehdottaa pudotusvalikon avulla muitakin komentoja mitä sinun on tarkoitus käyttää. Mistä tiedät miten komennot toimivat?
Apupaneelin Lang-tabista löytyvät kaikki Sonic Pi:n komennot ja niiden ohjeet. Voit myös hypätä komennon ohjetiedostoon suoraan siirtämällä osoittimen ensin haluamasi komennon, efektin tai syntikan päälle ja painamalla ctrl+i. Allaolevassa kuvassa käyttöjärjestelmänä on mac, mutta näppäinyhdistelmä on sama kaikilla käyttöjärjestelmillä.
Voit esimerkiksi lisätä teokseesi rytmiä samplejen avulla. Voit myös
käyttää edellisissä tehtävissä käytettyä kaoottisempaa satunnaisuutta
rrand(pienin, isoin)
komennolla. Älä myöskään unohda efektien käyttöä!
Voit kokeilla luoda sävellykseesi toisen osan tekemällä sointuja vaihtavaan looppiin rakenteita. Esimerkiksi edellistä esimerkkiä voisi jatkaa näin:
live_loop :sointukierto do
4.times do
sointu = [60,65,69]
sleep 2
sointu = [62,65,70]
sleep 1
sointu = [60,65,69]
sleep 2
sointu = [60,64,67]
sleep 1
end
2.times do
sointu = [62, 65, 69]
sleep 3
sointu = [60, 64, 69]
sleep 3
sointu = [60, 65, 69]
sleep 3
sointu = [61, 64, 69]
sleep 3
end
end
Alla on esitelty muutama tekniikka jonka avulla saat häkättyä musiikin teoriaa omaan käyttöösi!