Tuesday, March 14, 2006

Luento 17.3.2006

Luennon materiaalia löytyy täältä:

TKAvustMusTutk060317.pdf

Lisäilin jotain ja korjailin hiukan noita joukkoteoriaskriptejä. Tein mm. sävelluokkakellon tuottavan algoritmin. Esimerkkinä kellokuva, jolle on annettu syötteenä oheinen vektori. Syötteenä funktiolle voi antaa sävelluokkia tai midisävelkorkeuksia. Sisällytin funktioon huvikseni Huronin konsonanssiarvonkin.

X11(); pitchclock(c(5,4,8,10,1,8,12));



















Viimeksi jäi tuo joukkoteoreettinen analyysi esittelemättä ja ajattelin käydä hiukan läpi noita joukkoteoreettisia funktioita. Joukkoteorian perusteet eivät ole välttämättä kaikilla hanskassa, mutta sen avulla voi kuitenkin saada ihan ymmärrettäviä tuloksia.

Joukkoteoriaa käyttävät paitsi musiikkianalyytikot, myös säveltäjät yhä enenevässä määrin sen vuoksi, että nykyaikana harmonioita ei useinkaan pysty kategorisoimaan muulla tavoin kuin joukkoteoreettisesti. Kalev Tiits puhuu Musiikki-lehden 1-2/2005 numerossa artikkelissaan Hahmoetäisyyksien mittausmenetelmistä
aikasarjoissa ja musiikin vektoriesityksissä
joukkoteorian "ajankohtaisuudesta" (s.64) varsin lämpimin sanoin.

Sävelluokkiin perustuvaan joukkoluokitukseen on koetettu kehittää myös laajennuksena sävelalat huomioonottavia teorioita. Tällaisia on Marcus Castrenin kehittämä "sointuluokitus". Tämä muistui mieleen siitä Jopin Huronin konsonanssifunktioon liittyvästä kritiikistä (mikä oli aivan oikeutettu). Konsonoivuuteenhan (ja sonoriteettiin?) vaikuttaa ennenkaikkea sävelten asema sävelalassa. Esim. kromaattisen klusterin sävelluokat tarpeeksi laajalle alueelle hajautettuna tai suhteessa bassoon riittävän korkealle asetettuina soivat paljon konsonoivammin kuin oktaavin sisään ahdettuna, joka Huronin intervalliluokkiin perustuvassa funktiossa on ikäänkuin oletuksena. Castrenin ratkaisun tapaan voisi kehittää myös tuota Huronin menetelmää tai niin, että sävelten suhde sitä alempien sävelten yläsävelsarjaan otettaisiin huomioon. Tässä jollekin elämäntehtävä.

Toisena tapauksena esittelen Huronin konsonanssifunktiolla tehdyn analyysin, joka kohdistuu melodiaan. Tämä taisi olla JP:n idea.

Melodian konsonoivuuden tutkimisesta tuli myös mieleen, että joku voisi joskus tutkia sitä, mitkä asiat vaikuttavat melodian solfaamisen vaikeuteen ja laulettavuuteen. Tietysti toiset intervallit ovat keskimäärin vaikeammin tuotettavissa kuin toiset (esim. tritonus on hankalampi laulaa kuin puhdas kvartti jne), mutta myös tonaalisella ympäristöllä on merkitystä. Jos melodian rytmi unohdetaan, voisi luoda Huronin konsonanssiprofiilin tyyppisen vektorin tai itse asiassa markovin ketjuilla asia onnistuisi paremmin, koska silloin voisi ottaa paremmin huomioon intervalleja ympäristössään, pitemmältä matkalta. Tällaisen matriisin luomiseksi tarvittaisiin monia kokeita vaikkapa solfaopiskelijoiden keskuudessa. Laulatettaisiin monia erilaisia melodioita ja virhepaikat merkattaisiin muistiin (+ tietty määrä sitä edeltäviä intervalleja). Kun matriisi olisi luotu, voitaisiin laskea vaikkapa Modus novus- opuksen kullekin melodialle vaikeusaste:-)

JP kyseli tyyppiarvon eli moodin tuottavaa funktiota R:ssä. En löytänyt sellaista, mutta kyseessähän on tunnusluku, joka kuvaa sitä, mitä arvoa muuttujassa on eniten. Sen saa esimerkiksi näin:

tyyppiarvo <- function(vektori)
{
frekvenssitaulukko=table(vektori)
maxmaara=max(frekvenssitaulukko)
lukuarvo=as.double(names(frekvenssitaulukko[rev(order(table(vektori)))[1]]))
return(list(lukuarvo=lukuarvo, maxmaara=maxmaara))
}


eli kuinka paljon tiettyä lukua on enimmillään saadaan siten, että vektorin luvuista muodostetaan frekvenssitaulukko (table), josta lasketaan maksimifrekvenssi. Tämä sijoitetaan muuttujaan "maxmaara". Itse tyyppiarvoa varten täytyy frekvenssitaulukko järjestää frekvenssien mukaan (order). Sen jälkeen käännetään (rev) tulos, niin että se indeksi, joka on saanut eniten osumia, tulee ensimmäiseksi ja lopuksi poimitaan (names-komento ei poimi itse frekvenssiä vaan nimenomaan sen luvun, johon suurin frekvenssi liittyy, ikäänkuin rivin "nimen") tuo indeksillä 1 oleva luku ([1]). Tässä hiukan kehitin tuota funktiota niin, että nyt voidaan kutsua jompaa kumpaa
esim:

1) jos halutaan tyyppiarvon esiintymisten lukumäärä:
tyyppiarvo(c(6,5.5,4,5.5,4,2))$maxmaara

2) jos halutaan itse tyyppiarvo
tyyppiarvo(c(6,5.5,4,5.5,4,2))$lukuarvo

Midicsv:n antamien taulukoiden muokkaaminen R:ssä toimivaan muotoon vaatii aikalailla työtä. Löysin taas sellaisen midimuodon, joka vaatii omanlaistansa käsittelyä. Toimivan funktion luomisesta voi tulla pidempi projekti, mutta kuten Jopi totesi, jotta pääsisimme heti hommiin käsiksi, pitäisi tällainenkin R:ssä olla. Polyfoniset midit vaativat sitten oman käsittelyn, mutta kunhan saamme turhat röhnät pois, voisi luoda funktioita, jotka muokkaavat taulukon sopivaan muotoon erityyppisiä lähestymistapoja varten.

No comments: