Wednesday, March 29, 2006

Luento 31.3.2006


Juha R. esittelee hiukan omaa rytmiin liittyvää tutkimustaan ja sen pohjalta minä puolestani kerron plottaukseen eli kuvien piirtämiseen liittyvistä komennoista ja parametreista, regressiosuoran piirtämisestä, moniulotteisen skaalauksen tekemisestä R:llä ja jälleen kerran korrelaatiotesteistä. Keskihajontaakin tulee vielä hiukan demottua. Oheisen kuvan sisältökin selvinnee perjantaina. Kerrottakoon jo tässä vaiheessa, että siinä mm. ajanhetkellä 333 s kolmen koehenkilön komppi on kääntynyt upbeatiksi. Kuvaa klikkaamalla sen saa näkyviin suurempana.

Thursday, March 23, 2006

Luento 24.3.2006

With 6. Blues mode 2 (21211212) merkattu sinisellä.
Kiirettä pitää... mutta tässä blues mode2 -skripti alta löytyvän csv-fileen tutkimiseen.

Kokeilin nuita skriptejä yliopistolla tänään windowsissa ja nyt ne latautuvat ja toimivat. Testataan niiden käyttöä vielä Juhan transkription kohdalla. Tämän jälkeen jätetään joukkoteoria, jos ei kokonaan, niin ainakin joksikin aikaa. Sen erään Händel-motiivianalyysin olen ajatellut vielä toteuttaa...

Pidin tänään to 23.3. esitelmän ÅA:n symposiumissa "Sävellyksen harmonisen koherenssin mittaaminen vertailujoukkoanalyysin ja siirtymätodennäköisyysmatriisien avulla" ja voisin pikaisesti vilauttaa joitakin siihen liittyviä periaatteita, sillä aikaa kun nuo skriptit latautuvat koneille... Symposiumi jatkuu ja kannattaa katsoa, olisiko siellä jotakin kiinnostavaa. Osallistumismaksu on opiskelijoilta 5 e/pvä.

Tässä vielä laiton nuottikopio Juhan transkriptiosta...

Saturday, March 18, 2006

SetTheoryScripts again

Tein vielä erään lisäyksen kellokuva-skriptiin eli nyt se näyttää myös
Larry Solomonin taulukossaan (http://solomonsmusic.net/pcsets.htm)
esittämät joukkoluokkia karakterisoivat nimitykset.



















Noin 37 kokeen jälkeen sain kuin sainkin tuon SetTheoryScripts-tiedoston
windowsissani toimimaan. En kyllä tiedä miksi. Kokeilin kaikenlaista,
erilaisia tekstikoodauksia tallennettaessa ja myös tallennuksia eri
ohjelmilla.

Nyt oheista liitteenä olevaa tiedostoa voisi kokeilla windowsissa. Mikäli
c-asemaan on lisäksi sijoitettu oheinen "4.csv" -tiedosto, sille tehdään
koodiin sisältyvät kokeet.

Ensin pitää kuitenkin ladata netistä grid- ja gtools -paketit komennoilla

install.packages("grid")
install.packages("gtools")

Sen jälkeen valitse File-valikosta komento "Source R code..." ja yllä linkistä
löytyvä tiedosto

"SetTheoryScripts"

Sen jälkeen kestää tovin - pieni kahvipaussi Euroshopper
persikka-passiohedelmä-jugurtin kera nautittuna (tällöin mikään ei ole
niin ihanaa kuin R-istunto) voi olla paikallaan - ennenkuin funktiot on
ajettu.

Tämän jälkeen voi katsoa komennolla

ls()

mitä funktioita onnistui ajamaan ja kokeilla vaikkapa funktiota pitchclock
tai rel2 luennolla esitellyllä tavalla, esim.:

X11(); pitchclock(c(4,8,3));

rel2("3-11A","3-11B");

Laitoin skripteihin funktioiden ajon jälkeen save.image() -komennon,
jolloin RData-nimiseen tiedostoon jonnekin R:n kansioissa jää nuo
muuttujat ja funktiot muistiin. Silloin seuraavan kerran, kun R
käynnistetään, ne latautuvat valmiiksi. Nyt kannattaa osallistua Tiinan
joukkoteoreettisille kursseille ja kerätä muutama opintopiste kotiin
tekemällä jokin yksinkertainen joukkoluokka-analyysi Schönbergin musiikista
tai mitä siellä käsitelläänkin...

Jostain syystä muutamat rivit ovat ilmeisesti windowsin R-editorille liian
pitkiä (joukkoluokkatiedot sisältävät rivit), minkä vuoksi funktioiden ajo
ei editorista copy-pastaamalla suoraan onnistu vaan pitää ottaa tuo
File-valikon "Source R code..."-komento. Kuitenkin Bach-analyysit
onnistuvat copy-pastaamallakin, jos ne keskeytyvät jostain syystä. Näin
kävi kerran itse kokeillessani ajoa.

lines()-komennon parametreihin ei näköjään saisi antaa y-akselille rajoja
tapaan "ylim=c(luku,luku)". Siitä johtuu muutama varoitus ajon aikana.

MacOSX- ja linux-käytössä pitää Bach-analyysin suorittamiseksi tsekata
oheiset polkumääritykset.

#MAC:
#Compo=read.table("/Users/4.csv",na.strings=".",header=F);
#attach(Compo);
t1=proc.time();

#LINUX:
#Compo=read.table("/home/atte/4.csv",na.strings=".",header=F);attach(Compo);


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.

Thursday, March 09, 2006

Luento 10.3.2006

Laitoin utu:n palvelimelle muutamia musiikin joukkoteoriaan liittyviä skriptejä, jotka voi ladata tästä linkistä.

Demotiedosto em. skriptien testaukseen:
J.S.Bach: Es ist genug 4.csv.

Käyn 10.3. läpi muutamia tenttiin liittyviä asioita ja toivon, että sen jälkeen syntyisi keskustelua II periodin tavoitteista. Ehdotin siis yhteisiin alijonoihin, markovin ketjuihin ja joukkoteoriaan liittyviä lähestymistapoja, niitä kun on ollut jo aikaisemmin esille. Koska näitäkin voi soveltaa niin monella tavalla, voisimme keskustella siitä, millaiseen aineistoon näitä soveltaisimme ja millaisiin parametreihin. Nuo joukkoteoriaskriptit on tuossa siltäkin varalta, että aikaa jää hiukan niiden testaamiseen.

Testaaminen vaatii paketin gtools-asentamista komennolla

install.packages("gtools")

ja tietysti toimivaa verkkoyhteyttä. OSX:ssä voi käyttää valikkokomentoa "Package Installer".

Kun oheisen 4.csv -tiedoston sijoittaa Windows-koneessa c-hakemistoon, voi koko skriptin ajaa kerralla ilman pahempia virheilmoituksia, muutoin latautuvat vain alkupuolen funktiot, mutta Bach-analyysi jää tekemättä (jos sijoittaa csv-tiedoston muualle koneeseen, täytyy read.table-komentoon liittyvä polku muokata sen mukaan, ohjelmalistauksessa puolen välin jälkeen "SOME SAMPLE SCRIPTS"-kohdan alla. Systeemistä riippuen täytyy #-merkki poistaa kyseisen "Compo=read.table(...)" -komennon edestä. Tällöin ko. skripti ajetaan.) Se viekin tovin, ennenkuin koko ohjelma funktioineen on ajettu. Joukossa on pari print-komentoa, jotka hiukan hidastavat lataamista, mutta joiden avulla toisaalta voi seurata tapahtumien kulkua.

No, demoan tätä luennolla, jos aikaa jää.

Thursday, March 02, 2006