Lappeenrannan teknillinen yliopisto Teknistaloudellinen tiedekunta Tietotekniikan koulutusohjelma
Avoimen lähdekoodin musiikkiteknologia Kandidaatintyö
Kandidaatintyön aihe on hyväksytty 17.06.2008
Työn ohjaajana toimii yliassistentti TkT Kari Heikkinen Työn tarkastajana toimii prof. Jari Porras
Lappeenrannassa 20.08.2008
Mikko Gynther
Punkkerikatu 5 C 43, 53850 Lappeenranta
+358408217855
TIIVISTELMÄ
Lappeenrannan teknillinen yliopisto Teknistaloudellinen tiedekunta Tietotekniikan koulutusohjelma
Mikko Gynther
Avoimen lähdekoodin musiikkiteknologia
Kandidaatintyö 2008
48 sivua, 5 kuvaa, 8 taulukkoa, 5 liitettä Tarkastaja: Professori Jari Porras
Hakusanat: Avoin lähdekoodi, musiikki, virtuaaliinstrumentti, äänisynteesi Keywords: Open source, music, virtual instrument, sound synthesis
Musiikkiteknologia on laaja soveltava tieteenala, jota voidaan hyödyntää kasvatustieteissä, psykologiassa ja kognitiivisissa tieteissä. Musiikkilaitteet ja
ohjelmistot hyödyntävät tietotekniikkaa. Musiikkiteknologian ohjelmat ovat joko kaupallisia tai pohjautuvat avoimen lähdekoodin ajatteluun.
Tässä työssä kartoitin Linuxin avoimen lähdekoodin virtuaaliinstrumentit sekä toteutin rumpukoneen, kosketinsoittimen ja yksinkertaisen karaokeohjelman mobiilille laitteelle.
Tehty työ osoittaa, että tietoteknisin keinoin voidaan toteuttaa tutkimushankkeissa hyödynnettäviä musiikkiteknologian ohjelmia.
ABSTRACT
Lappeenranta University of Technology Faculty of Technology Management
Degree Program of Information Technology
Mikko Gynther
Open Source Musical Engineering
Bachelor's Thesis 2008
48 pages, 5 figures, 8 tables, 5 appendices Examiner: Professor Jari Porras
Keywords: Open source, music, virtual instrument, sound synthesis
Musical Engineering is a broad applied branch of science which can be utilized to pedagogics, psychology and cognitive science. Musical devices and software utilize information technology. Musical engineering software is either commercial or based on open source philosophy.
In this thesis I study open source virtual instruments developed for Linux and develop a drum machine, a musical keyboard and a simple karaoke program for a mobile device.
This thesis shows that musical engineering software which is useful in research projects can be developed by means of information technology.
ALKUSANAT
Tämä työ tehtiin Lappeenrannan teknillisessä yliopistossa Tietoliikenneohjelmistojen laboratoriossa kesällä 2008. Haluan kiittää Tietoliikenneohjelmistojen laboratoriota hyvästä työilmapiiristä ja ympäristöstä sekä avusta Linuxkäyttöjärjestelmän ja Maemo
ympäristön kanssa.
SISÄLLYSLUETTELO
TIIVISTELMÄ...ii
ABSTRACT...iii
ALKUSANAT...iv
SISÄLLYSLUETTELO...1
SYMBOLILUETTELO...3
1 JOHDANTO...4
1.1 Tausta...4
1.2 Tavoitteet ja rajaukset...5
1.3. Työn rakenne...6
2 MUSIIKKITEKNOLOGIAN KÄSITTEET...7
2.1 Taustatietoa tekniikasta ja työssä käytetyt käsitteet...7
2.2 Tutkimusongelman ja sen ratkaisutavan esittely...11
3 VIRTUAALIINSTRUMENTTIEN OHJELMOINTI...13
3.1 Linuxin virtuaaliinstrumenttien kartoitus...14
3.2 Drumsohjelma...17
3.3 Melodyohjelma...20
3.4 Karaokeohjelma...22
3.5 Melodyohjelman suorituskykytestaus...23
3.6 Tulosten yhteenveto...25
3.7 Työn vaativuus ja työmäärä...26
3.8 Tulosten tulkinta...27
4 POHDINTA...29
4.1 MobiKid ja Karaokeohjelmien vertailu...29
4.2 Tulosten merkitys...30
4.3 Tulevaisuus...31
5 YHTEENVETO...33
LÄHDELUETTELO...34
Liite 1. Musiikkiteknologian avainsanat lähteestä ACM...38
Liite 2. Drumsin soivat äänet toistava funktio...40
Liite 3. ALSAtietovirtaan kirjoittava funktio...42
Liite 4. Puskurit summaava funktio...43
Liite 5. Melodyn äänialgoritmit...44
SYMBOLILUETTELO
ALSA Advanced Linux Sound Architecture FM Frequency Modulation (taajuusmodulointi)
GTK+ The GIMP Toolkit
JACK Jack Audio Connection Kit
JamMo Jamming Mobile
LFO Low Frequency Oscillator (matalataajuinen oskillaattori) Mac OS Macintosh Operating System
MIDI Musical Instrument Digital Interface OpenGL Open Graphics Library
UMSIC Usability of Music for Social Inclusion of Children
1 JOHDANTO
1.1 Tausta
Musiikki on ollut olennainen osa ihmisten elämää vuosituhansien ajan. Se on merkittävä osa kulttuureita ja nähdään usein universaalina kielenä. Tekninen kehitys on monipuolistanut musiikin harrastamisen mahdollisuuksia.
Musiikkiteknologia (Musical Engineering) on soveltava tieteenala, jota voidaan hyödyntää kasvatustieteissä, psykologiassa ja kognitiivisissa tieteissä. Musiikin harjoittamisen yhteys luovuuteen ja älykkyyteen sekä musiikin vaikutus ihmisen kehitykseen on kiinnostanut tutkijoita pitkään. Musiikkiteknologia hyödyntää fysiikan aaltoliikkeen ja mekaniikan sekä signaalinprosessoinnin teorioita. Se pyrkii tekniikan avulla vastaamaan ihmisten musiikillisiin tarpeisiin, jotka voivat olla erittäin yksilösidonnaisia. Tietotekniikka on erottamaton osa musiikkiteknologiaa, ja sen merkitys musiikkiteknologiassa on kasvanut entisestään tietokoneiden laskentatehon lisääntyessä. Tietotekniikkaan sisältyy ohjelmointi, joka mahdollistaa fysiikan ilmiöiden todentamisen.
Osa musiikkiteknologian tuotteista on ollut kaupallisia ohjelmistoja esimerkiksi musiikin ammattimaiseen tuotantoon. Yrityksissä on myös tutkittu ja kehitetty erilaisia musiikkilaitteita sekä ammattimaiseen että kuluttajien käyttöön. Kaupallisten ohjelmistojen lisäksi myös avoimen lähdekoodin (open source) musiikkiteknologiaa on saatavilla. Avointa lähdekoodia voidaan hyödyntää tieteellisessä tutkimustyössä tehokkaasti, koska sen käyttö on suljettua lähdekoodia vapaampaa. Näin saavutetut tutkimustulokset ovat helpommin hyödynnettävissä sekä tutkimuksessa että erilaisissa toteutuksissa. Kuitenkin avoin lähdekoodi on toistaiseksi verrattain harvinaista musiikkiteknologiassa. Onkin tärkeää saada selville: Kuinka avoimen lähdekoodin musiikkiteknologiaa voidaan hyödyntää tieteellisessä tutkimustyössä?
1.2 Tavoitteet ja rajaukset
Työn rajaukset keskittyvät 1UMSIChankkeen (Usability of Music for Social Inclusion of Children) viitekehykseen. UMSIChankkeen tarkoitus on ehkäistä lasten syrjäytymistä esimerkiksi lisäämällä heidän yhteenkuuluvuuden tunnettaan musiikin avulla.
Musiikkiterapian on todettu muun muassa parantavan huomio ja keskittymiskykyä sekä impulsiivisuuden hallintaa lasten keskuudessa. Sen on todettu myös parantavan itsetuntoa, itseilmaisua ja muistia [33].
UMSIChankkeessa toteutetaan musiikkiohjelmisto vertaisverkkoympäristöön. Siinä tuotetaan JamMosovellus, jossa on kolme toimintatapaa: Karaoke, Improvisointi (Improvisation) ja Sävellys (Composition) [33]. Tavoitteenani oli tuottaa improvisointiin soveltuvia virtuaaliinstrumentteja, joiden avulla käyttäjä voi myöhemmin sekvensseriosiota hyödyntäen soittaa taustamusiikin päälle ja äänittää omaa soittoaan.
Omissa virtuaaliinstrumenteissani taustamusiikkia tai äänitysmahdollisuutta ei ole, vaan pyrin ainoastaan kehittämään soitettavia virtuaaliinstrumentteja.
En ensisijaisesti pyrkinyt tekemään virtuaaliinstrumentteja, joiden tuottama ääni on mahdollisimman lähellä fyysisiä instrumentteja. Tavoitteeni oli saada ääntä tuotettua eri periaatteita hyödyntäen. Näin tuottamaani ohjelmakoodia voidaan todennäköisesti hyödyntää paremmin tulevaisuudessa.
Ohjelmia kehitin Maemoympäristössä ja kohdelaitteena oli Nokia N810. Maemo on Nokian tukema Linuxpohjainen kehitysympäristö Internet Tabletien ohjelmille, ja sitä käytetään tulevassa UMSIChankkeessa. N810 valittiin, koska se oli saatavilla [15, 33].
Virtuaaliinstrumenttini käyttävät Maemon tukemaa ALSAäänikirjastoa, joka on Linux
ympäristön standardiäänikirjasto. Linuxin JACKäänipalvelin olisi suunnattu
1 UMSIC: FP7 224561 –hanke alkaa 1.9.2008 ja päättyy 31.8.2011.
ammattimaisempaan musiikkikäyttöön, mutta se ei ainakaan toistaiseksi sisälly Maemo
ympäristöön [17, 35].
Tarkoitukseni ei ollut toteuttaa graafista käyttöliittymää tai valmista osaa sovellukseen, vaan ainoastaan tuottaa ja kerätä UMSIChankkeessa myöhemmin hyödynnettävää tietoa.
Tarkoitukseni oli myös tutustua virtuaaliinstrumenttien ohjelmointityöhön ja helpottaa tulevaa suunnittelutyötä ja aikataulujen arviointia.
En tutustunut kasvatustieteiden, psykologian tai kognitiivisten tieteiden lähteisiin työtä tehdessäni. Käyttämäni lähteet ovat lähinnä tekniikan alan julkaisuja.
1.3. Työn rakenne
Teoriaosuudessa tutkin työhön liittyvää teoreettista taustaa ja esittelen käytetyt käsitteet ja termit. Esittelen myös tutkimusongelman ja sen ratkaisutavan.
Käytännön osuus kuvaa työn, työvaiheet, tulokset ja työtä tehdessä esiintyneet ongelmat.
Siihen kuuluu kuvaus olemassa olevien virtuaaliinstrumenttien kartoituksesta ja kuvaukset kolmesta ohjelmoimastani ohjelmasta.
Pohdintaluvussa arvioin työn tuloksien merkitystä ja tulevaisuutta. Yhteenveto on lyhyt kooste tehdystä työstä.
2 MUSIIKKITEKNOLOGIAN KÄSITTEET
2.1 Taustatietoa tekniikasta ja työssä käytetyt käsitteet
Musiikkiteknologia ymmärretään hyvin laajana käsitteenä (ks. Liite 1). Taulukossa 1 on tilasto artikkelien avainsanoista. Merkitykseltään vastaavia avainsanoja yhdistin parantaakseni taulukon luettavuutta. Tilastosta näkee musiikkiteknologian tutkimuksen painotuksia osaalueittain. Pääpiirteittäin avainsanat ovat kuvaavia. Ainoastaan
”Musical”, ”Musical engineering”, avoimeen lähdekoodiin liittyvät avainsanat eivät kuvaa artikkelin sisältöä tarkasti.
Taulukko 1: Musiikkiteknologian avainsanat (ks. Liite 1)
Avainsana (suomennos) Artikkelien määrä (yhteensä 72)
Prosenttiosuus artikkeleista
Music education (musiikin opetus) 14 19,4 %
Musical (musiikillinen) 14 19,4 %
Virtuaaliinstrumentteihin liittyvät avainsanat 13 18,1 %
Composition music (sävellys musiikki) 7 9,7 %
Karaoke 6 8,3 %
Musical cognition (musiikillinen kognitio) 5 6,9 %
Avoimeen lähdekoodiin liittyvät avainsanat 3 4,2 %
Music therapy (musiikkiterapia) 3 4,2 %
Sosiaalisiin ja psykologisiin seikkoihin liittyvät avainsanat
3 4,2 %
Improvisointiin liittyvät avainsanat 2 2,8 %
Musical engineering (musiikkiteknologia) 2 2,8 %
Artikkelit voidaan jakaa kolmeen ryhmään esiintymien määrän perusteella. Musiikin opetustyökaluihin ja virtuaaliinstrumentteihin on panostettu paljon. Sävellys ja karaoketyökalut sekä musiikillinen kognitio ovat tutkittuja aiheita. Avoin lähdekoodi ja musiikin sosiaaliset ja psykologiset vaikutukset ovat toistaiseksi olleet vähemmän suosittuja tekniikan alan julkaisuissa.
Tässä kappaleessa käytetyt musiikkiteknologian käsitteet on määritelty taulukossa 2.
Useita musiikkiteknologiaan liittyviä termejä käytetään eri merkityksissä, mikä aiheuttaa helposti väärinymmärryksiä eri lähteitä luettaessa.
Taulukko 2: Musiikkiteknologian käsitteitä Käsite Merkitys
Ääni Väliaineen, tavallisesti ilman, hiukkasten värähtelyä, joka on peräisin värähtelijästä. Värähtely on muutettavissa sähköiseksi signaaliksi esimerkiksi mikrofonin avulla. Sähköinen signaali voidaan edelleen muuttaa digitaaliseksi, jolloin käytetään termiä digitaalinen ääni.
Ääninäyte (sample)
1) Yksittäisen näytteen arvo. Sekunnissa ääntä on näytetaajuuden verran ääninäytteitä.
2) Tiedosto, jota toistamalla voidaan tuottaa virtuaaliinstrumentin ääntä.
Sisältää yhden soittimen, esimerkiksi rummun, yhden äänen. Tässä työssä käytetään termiä äänitiedosto.
Äänisynteesi Menetelmät, joiden avulla luodaan musiikillisesti kiinnostavia ja mielellään realistisia ääniä reaaliajassa [29].
Virtuaali
instrumentti
Digitaalista ääntä reaaliajassa tuottava soitettava ohjelma.
Sampleri Äänitiedostoja käyttäjän syötteiden perusteella toistava ohjelma tai laite.
Sekvensseri Moniraitainen musiikkiohjelma, joka voi toistaa ja tallentaa ääni ja MIDIraitoja.
Liitännäinen (plugin)
Sekvensserissä toimiva virtuaaliinstrumentti tai efekti.
Löytämieni artikkelien avulla voi muodostaa musiikkiteknologiasta kuvan 1 mukaisen kokonaiskuvan. Suunnatut nuolet kuvaavat hierarkiasuhdetta. Kuvasta voi nähdä musiikkiteknologian ja psykologian läheisen yhteyden. Musiikkiteknologia tarjoaa työkaluja esimerkiksi musiikkiterapian tarpeisiin musiikin tekemisen itseisarvon lisäksi.
Kuvaa voi lähestyä joko alhaalta tai ylhäältä. Ylhäältä lähdettäessä näkökulma on
tekninen, alhaalta puolestaan psykologinen. Tummennetut käsitteet liittyvät läheisesti tähän työhön. Kuvaan on myös merkitty joitakin viittauksia artikkeleihin.
Kuva 1: Musiikkiteknologia [Liite 1]
Kirjallisuuskatsaus osoitti, että seuraavia tutkimusaiheita on käsitelty:
● Äänisynteesi [21, 25]
● Virtuaaliinstrumentit [3, 34]
● Musiikin analysointi, luokittelu ja luominen [5, 6, 28]
● Musiikkilaitteiden ja lelujen erilaiset käyttöliittymät [2, 14, 27, 30]
● Lapsille soveltuvat musiikkityökalut [1, 7]
● Musiikin opetustyökalut [18, 23, 24]
● Musiikin psykologiset, pedagogiset ja kognitiiviset vaikutukset [4, 10, 20, 22, 26]
Värähtelijää voidaan mallintaa massajousisysteemin avulla [21]. Artikkelissa vertaillaan kolmea numeerista menetelmää ja todetaan, että käytännössä niiden välillä on vähän korvin havaittavaa eroa. Instrumentin fyysistä mallinnusta voidaan lähestyä myös jakamalla instrumentti pienempiin mallinnettaviin osiin [25].
Virtuaaliinstrumenttien avulla on tutkittu perinteisten instrumenttien äänen mallintamista; esim. puhallinsoittimen soitettavuuteen liittyviä ongelmia koskettimilla soitettaessa [34] ja huilun tyyppisen instrumentin äänen tuottamista [3]. Äänitiedostojen toistoon perustuvista virtuaaliinstrumenteista, kuten kaupalliset virtuaaliinstrumentit [13, 31], ei löytynyt julkaisuja.
Yksinkertainen, tietyn musiikkityylin kappale voidaan luoda kyseistä tyyliä edustavien näytteiden ja neuroverkon avulla [6]. Eri äänilähteiden erottamista yksikanavaisesta äänisignaalista on tutkittu [5]. Kyseinen artikkeli antaa rohkaisevia tuloksia äänenerottelualgoritmien mahdollisuuksista. Äänisignaalia analysoimalla ja evoluutiolaskentaa hyödyntämällä voidaan suositella kuuntelijalle mieluista musiikkia [28].
Rumpukonetta voidaan ohjata ihokosketuksella [2]. Virtuaaliinstrumenttia voidaan soittaa lihaksen sähköisillä jännitteillä (elektromyografia) [27]. Virtuaaliinstrumentin ohjaamista äänisignaalin avulla on tutkittu [14]. Pehmolelu sopii hyvin äänen tallennusmediaksi lapsille [30]. Artikkelissa todetaan, että lapset keksivät useita käyttömahdollisuuksia tallennetulle äänelle.
Musiikkisekvensserin aikatason hahmottaminen helpottuu esimerkiksi pallojen ja kierteisen kiskon avulla [7]. Pallot valuvat kiskoa pitkin alaspäin ja matkan varrelle sijoitetaan syntetisaattorimoduuleita. Fyysisen sekvensserin todettiin helpottavan musiikin teoreettisten käsitteiden ymmärtämistä. Musiikkisekvensserin käytössä ei välttämättä vaadita raitojen käsitteen ymmärtämistä [1]. Tavallisesti raita sisältää yhden instrumentin ääntä, minkä takia ääni voidaan sijoittaa äänikuvassa haluttuun paikkaan ja
äänen voimakkuutta voidaan säätää helposti muihin raitoihin vaikuttamatta. Tämä lähestymistapa voidaan korvata instrumentteja kuvaavilla symboleilla, jotka sijoitetaan kuvassa eri paikkaan halutun toiminnon mukaan [1]. Tämän esitystavan todetaan olevan helposti lapsen ymmärrettävissä.
On tutkittu ohjelmaa, jonka avulla lapsille opetetaan musiikin käsitteistöä, nuottien lukemista, pianonsoittoa ja oman musiikin säveltämistä [18]. Lapsi voi harrastaa musiikkia vanhempansa kanssa, vaikka vanhempi ei osaisikaan soittaa mitään instrumenttia [23]. Kyseisen musiikkiohjelman havaitaan tuovan yhteiseen musisointiin rikkaampaa musiikillista ilmaisua. Musiikinopetusta on myös lähestytty korvakuulolta oppimalla, kuten musiikkia on ollut tapana oppia perinteisesti epämuodollisessa oppimisympäristössä [24].
Lapsen sävellystyötä tietokoneympäristössä on tutkittu [26]. Artikkelissa todetaan, että tietokoneympäristö mahdollistaa sävellyksen kuulemisen heti ja täten musiikinteorian tunteminen ei ole vaatimus säveltämiselle. Musiikillisen lahjakkuuden ja vieraan kielen hyvän ääntämisen yhteys on havaittu [20]. Myös musiikkiterapia sekä musiikin sosiaaliset ja fysiologiset vaikutukset ovat tutkittuja aiheita. Lapsen ja vanhemman musiikillisen kanssakäymisen vaikutuksia lapsen kehitykseen on tutkittu [4].
Matkapuhelinsovelluksen avulla on hyödynnetty musiikin vaikutuksia liikuntasuorituksiin [22]. Neurologisen musiikkiterapian tietokonejärjestelmää voidaan käyttää autismin hoidossa [10].
2.2 Tutkimusongelman ja sen ratkaisutavan esittely
Linuxkäyttöjärjestelmälle on saatavilla useita avoimen lähdekoodin virtuaali
instrumentteja. Suuri osa niistä toimii itsenäisinä ohjelmina, ei esimerkiksi sekvensseriohjelman liitännäisinä kuten useat virtuaaliinstrumentit Windows ja Mac OS
käyttöjärjestelmissä. Itsenäisten ohjelmien hyödyntäminen on todennäköisesti mahdollista myös Linuxjohdannaisissa ympäristöissä kuten Maemo. Maemoympäristön
soveltuvuus virtuaaliinstrumenteille on tärkeä selvittää UMSIChankkeen takia. Siksi tämän työn tutkimusongelma oli seuraava:
Miten avoimen lähdekoodin ideologiaa voidaan hyödyntää ohjelmoidessa virtuaaliinstrumentteja Maemoympäristöön?
Oman toteutukseni pohjalle etsin avoimen lähdekoodin virtuaaliinstrumentteja ja äänityökaluja kuten Hydrogenrumpukone [12]. Löytämieni ohjelmien pohjalta tein Maemoympäristöön sopivia yksinkertaisia toteutuksia. Samalla tutkin, kuinka hyvin Linuxympäristöön tehty avoin lähdekoodi on siirrettävissä Maemoympäristöön. Työn tavoitteet olivat:
● Linuxin avoimen lähdekoodin virtuaaliinstrumenttien kartoitus
● Yksinkertaisten virtuaaliinstrumenttien ohjelmointi
● Yksinkertaisen karaokeohjelman ohjelmointi äänitysominaisuuden toteuttamiseksi
3 VIRTUAALIINSTRUMENTTIEN OHJELMOINTI
Virtuaaliinstrumentteihin liittyy paljon käsitteitä, jotka eivät käyneet ilmi musiikkiteknologian käsitteiden yhteydessä. Tässä kappaleessa käytetyt uudet käsitteet on selvitetty taulukossa 3.
Taulukko 3: Virtuaaliinstrumenttien käsitteistöä
Käsite Merkitys
Bittisyvyys (Bit depth) Bittien määrä yhdessä ääninäytteessä.
Näytetaajuus (Sample rate)
Sekunnissa otettavien ääninäytteiden määrä, kun signaali muutetaan digitaaliseksi.
Nyquistin teoreema Signaalinprosessoinnin teoreema, jonka mukaan signaalia, jonka korkein taajuus on f, ei voida esittää täydellisenä pienemmällä näytetaajuudella kuin 2*f.
Puskuri Äänidatalle varattu muisti.
MIDI Kontrolliprotokolla musiikkilaitteille. MIDIkontrollidatan avulla voidaan ohjata esimerkiksi virtuaaliinstrumentteja ja ohjelmistosyntetisaattoreita. Kontrollidata voidaan tallentaa MIDItiedostoon myöhempää toistoa varten [19].
Ohjelmistosyntetisaattori MIDItiedostojen toistoon tarkoitettu ohjelma.
Hyödynnetään esimerkiksi peleissä ja nuotinnusohjelmissa.
Oskillaattori Värähtelyä tuottava laite tai ohjelmakoodi.
LFO Matalataajuinen oskillaattori.
Tremolo Efekti, joka aiheuttaa äänenvoimakkuuden tasaista ja edestakaista vaihtelua.
Lisäävä synteesi (Additive synthesis)
Äänisynteesin menetelmä, jossa sinikomponentteja summataan [29].
Vähentävä synteesi (Substractive synthesis)
Syntetisaattoreissa käytetty periaate, jossa oskillaattorilla tuotettua ääntä käsitellään suotimilla.
Taajuusmodulointi Äänisynteesin menetelmä, jossa yhden sinikomponentin taajuutta moduloidaan toisella sinikomponentilla [29].
Intervalli Kahden sävelen suhteellinen korkeusero.
Oktaavi Intervalli, jossa korkeamman sävelen taajuus on kaksinkertainen matalamman sävelen taajuuteen verrattuna.
Ääniala Instrumentin matalimman ja korkeimman äänen välinen ero.
3.1 Linuxin virtuaaliinstrumenttien kartoitus
Löysin yhteensä 20 virtuaaliinstrumenttia, minkä takia en etsinyt muita ääntä käsitteleviä ohjelmia. Pisteytin ohjelmat helpottaakseni omaa ja mahdollisesti myös muiden tulevaa työtä. Pisteytyksen perusteena käytin ohjelman yksinkertaisuutta, omia käyttökokemuksia lyhyen kokeilun perusteella, ohjelmointikieltä, ohjelmakoodin määrää ja ymmärrettävyyttä, kehittäjien määrää, projektin aktiivisuutta sekä vaadittuja liitännäisiä ja rajapintoja. Yksikään virtuaaliinstrumentti ei kuitenkaan vaikuttanut lupaavalta kaikkien arviointikriteerien osalta. Virtuaaliinstrumenttien pisteytys on selvennetty taulukossa 4.
Taulukko 4: Virtuaaliinstrumenttien pisteytys Pisteet Merkitys
5 Instrumentti soveltuu hyvin omaan työhöni.
4 Instrumentti on todennäköisesti hyödynnettävissä omassa työssäni.
3 Instrumentti on mahdollisesti hyödynnettävissä omassa työssäni.
2 Instrumentti on mahdollisesti hyödynnettävissä omassa työssäni, mutta ohjelmakoodin käyttö olisi työlästä.
1 Instrumenttia ei voi hyödyntää ohjelmointikielen tai liitännäisrajapinnan takia.
Taulukossa 5 on esitetty omaan työhöni parhaiten soveltuvat virtuaaliinstrumentit.
Kaikki taulukon 5 instrumentit on ohjelmoitu joko C tai C++kielellä, joille on olemassa kääntäjät Maemoympäristöön. Muita käytettyjä kieliä ovat Java ja Snd, joka on musiikkiteknologiakäyttöön määritelty kieli. Sekä Javalla että Snd:lla on ohjelmoitu
ainoastaan yhdet instrumentit. Lisäksi yhden instrumentin joitakin itsenäisiä osia on ohjelmoitu Javalla, vaikka se muuten onkin ohjelmoitu C++kielellä.
Taulukko 5: Linuxin virtuaaliinstrumentteja
Instrumentti Kuvaus Soveltuvuus Pisteet
(15)
Kehittäjien määrä
AmSynth Vähentävä
synteesi
+ Vähemmän koodia kuin monessa muussa
+ Melko helppo käyttää ja vaikuttaa toimivalta
Paljon ominaisuuksia
4 1, pieniä osia muilta kehittäjiltä
Horgand Taajuusmo
dulointi
+ Vähemmän koodia kuin monessa muussa
Paljon ominaisuuksia.
4 1
Bristol Useiden
syntetisaat
toreiden emulointi
+ Toimii hyvin ja erinomainen äänenlaatu
+ Projekti on aktiivinen
Koodia on paljon
Todella paljon ominaisuuksia.
3 1, pieniä osia muilta kehittäjiltä
Linux Sampler Sampleri + Koostuu monesta itsenäisestä ohjelmasta
+ Projekti on aktiivinen
Vaikuttaa monimutkaiselta
Koodia on todella paljon
3 9
ZynAddSubFX Useita äänisyn
teesin periaatteita
+ Ohjelmakoodia on kommentoitu hyvin
Ohjelma on monimutkainen
Koodia on todella paljon
3 1
Koko taulukko 5 on saatavissa internetistä [8]. Internetistä saatavassa taulukossa instrumentteja on arvioitu kattavammin. Siinä on myös tiedot projektien aktiivisuudesta sekä virtuaaliinstrumenttien kotisivujen internetosoitteet ja ohjelmointikielet.
Monet virtuaaliinstrumentit vaativat JACKäänipalvelimen tai liitännäisrajapintoja, jotka eivät sisälly Maemoympäristöön. Yhdestäkään virtuaaliinstrumentista ei ollut kunnollista dokumentaatiota saatavilla, mikä vaikeutti monimutkaisen ja muutamia tuhansia rivejä pitkän ohjelmakoodin hyödyntämistä. Dokumentaation puuttumista selittää osaltaan se, että suurin osa virtuaaliinstrumenteista on yhden ihmisen ohjelmoimia.
Suuri osa instrumenteista vaikutti keskeneräisiltä. Niissä oli virheitä, esimerkiksi äänet jäivät välillä soimaan ja ohjelmat kaatuilivat. Suurinta osaa ei ole päivitetty muutamaan vuoteen ja joidenkin kehittäminen on lopetettu kokonaan. Vähäinen päivitysaktiivisuus vähentää monen virtuaaliinstrumentin lähdekoodin hyödynnettävyyttä myös tulevaisuudessa.
Myös omat ohjelmointitaitoni rajoittivat virtuaaliinstrumenttien ohjelmakoodin hyödyntämistä. Monet instrumentit käyttävät säikeitä, joita en toistaiseksi osaa ohjelmoida. Kaiken kaikkiaan olemassa olevan ohjelmakoodin hyödyntäminen olisi vaatinut merkittävää syventymistä ohjelmakoodiin ja ohjelmoinnin opiskelua. Lisäksi löytämieni virtuaaliinstrumenttien laskenta ja muistivaatimuksien täyttyminen Nokia N810 laitteella ei ole varmaa. Näistä syistä päätin aloittaa ohjelmointityön Linux Journalin ALSAoppaan perusteella [32].
ALSAoppaan esimerkkiohjelmat on ohjelmoitu Ckielellä ja ne toimivat Linuxissa komentoriviohjelmina. Niissä tulostetaan ALSAn parametreja, avataan kahva toistettavalle ja äänitettävälle datalle sekä toistetaan ja äänitetään tietovirrasta.
Toistavasta esimerkkiohjelmasta oli helppo muokata ohjelma, jossa toistettava äänidata luetaan tiedostosta.
Äänitiedostojen toistoon perustuva virtuaaliinstrumentti vaikutti toteuttamiskelpoiselta muokatun esimerkkiohjelman pohjalta. Äänitiedostojen toistoon perustuvien instrumenttien heikkous on suuri muistin tarve, koska jokainen instrumentin ääni joudutaan tallentamaan instrumenttia suorittavalle laitteelle [29]. Äänitiedostojen määrää voidaan vähentää ääntä käsittelevillä algoritmeilla, jotka eivät puolestaan ole yksinkertaisia toteuttaa.
Rumpukoneen ohjelmointi vaikutti järkevältä, koska rummun äänellä ei ole varsinaista sävelkorkeutta. Siksi samoilla rumpuäänillä voidaan soittaa monia kappaleita, ja yksi ääni kustakin rummusta riittää yksinkertaiseen toteutukseen. Rummun sointi on lyhyt, joten äänen kestoa voidaan pitää vakiona. Poikkeuksen muodostavat symbaalit.
Yksinkertaisuuden vuoksi en päättänyt ottaa myöskään symbaalien soinnin kestoa huomioon. Oikeita symbaaleja soitettaessa soittaja voi vaimentaa soivan symbaalin, ja näin vaikuttaa soinnin kestoon.
3.2 Drumsohjelma
Drums on yksinkertainen, Ckielellä ohjelmoimani rumpukone, jonka toiminta perustuu äänitiedostojen toistamiseen. Kussakin tiedostossa on yhden rummun tai symbaalin ääni, joka toistetaan käyttäjän painaessa ääntä vastaavaa painiketta. Drumsin äänet ovat bassorumpu, pikkurumpu, pieni tomtom, suuri tomtom, crash ja hihat. Kuvassa 2 on esitetty Drumsin näyttö Maemoympäristössä työkoneellani. Drumsin ohjelmakoodi on saatavilla internetistä [8].
Ohjelman toiminta perustuu tilakoneeseen, joka sisältää tiedot kaikkien äänten tiloista.
Mahdollisia tiloja kullekin äänelle ovat OFF, ON ja PLAYING. OFF tarkoittaa, ettei ääni soi. ON tarkoittaa, että ääni alkaa soida ja PLAYING, että äänen toistaminen on kesken.
Tilakone siis mahdollistaa kaikkien äänien yhtäaikaisen soimisen. ON ja PLAYINGtilat tarvitaan, koska ääntä käsitellään puskureittain. Ääntä ei soiteta kerralla loppuun asti, vaan käyttäjän syötteisiin reagoidaan myös äänien soidessa.
Kuva 2: Drums
Drumsrumpukoneen ohjelmoinnin aloitin ALSAesimerkistä muokkaamastani äänitiedostoja soittavasta ohjelmasta. Lisäsin ohjelmaan silmukan, jonka sisällä toistettiin kahta ääninäytettä käyttäjän syötteiden mukaisesti. Tämän jälkeen siirsin ohjelman Maemoympäristöön, mikä onnistui Maemon opetusmateriaalin [16] sekä GTK+
kirjaston dokumentaation [9] avulla. Drums hyödyntää GTK+käyttöliittymäkirjaston Main ja Idlesilmukoita. Silmukoiden avulla pystyin tekemään ohjelmastani reaaliaikaisen ilman säieohjelmointia, jota en toistaiseksi hallitse. Reaaliaikaisuus tarkoittaa tässä, että ohjelma reagoi käyttäjän syötteisiin dataa käsitellessäänkin.
Mainsilmukka käsittelee käyttäjän syötteet ja lähettää signaalit käyttäjän painamista painikkeista callbackfunktiolle. Callbackfunktiossa muutetaan painiketta vastaavan äänen tila ONtilaan. Idlesilmukkaa ajetaan aina, kun ohjelman Mainsilmukassa ei tapahdu mitään ja ohjelma saa prosessoriaikaa. Idlesilmukassa kutsutaan funktiota, jossa toistetaan kaikki sillä hetkellä soivissa tiloissa olevat äänet (ks. Liite 2). ONtilassa olevan äänen tiedostoosoitin siirretään tiedoston alkuun ja tila muutetaan PLAYING
tilaan. PLAYINGtilassa olevan äänen tiedostoosoitinta ei siirretä alkuun, vaan toisto
jatkuu samasta kohdasta, johon edellisellä suorituskerralla jäätiin. Loppuun asti soitettu ääni muutetaan OFFtilaan.
N810laitteen kosketusnäyttö ei mahdollista useamman äänen soittamista yhtäaikaisesti, mutta riittävän nopeasti soitettaessa eri äänet soivat jonkin aikaa päällekkäin.
Yhtäaikaisesti soivat äänet summataan (ks. Liite 3), koska ALSAn tietovirtaan voidaan kirjoittaa toistettavaksi kahvasta riippuen ainoastaan yksi mono, stereo tai monikanavapuskuri (ks. Liite 4). Ensimmäisessä summausalgoritmissani ääneen aiheutui suurta häiriötä. Kiersin ongelman vaihtamalla tietotyypin ALSAesimerkissä käytetystä kahdeksanbittisestä 16bittiseen. Kahdeksanbittinen tietotyyppi olisi kyllä mahdollistanut ohjelman bittisyvyyden vaihtamisen helposti, koska tavallisimmat bittisyvyydet (8, 16, 24 ja 32) ovat kahdeksalla jaollisia.
Summauksessa on otettava huomioon, että kahden näytteen yhteenlaskettu arvo voi aiheuttaa yli tai alivuodon. Tällaisissa tapauksissa arvo asetetaan vuodon mukaan joko maksimiin tai minimiin. Toistettavassa äänessä tämä on kuultavissa säröytymisenä, koska interferenssiaaltoa ei voida esittää tietotyypin rajallisten arvojen takia alkuperäisenä.
Työkoneeni kehitysympäristössä ilmeni ongelmia, joita ei N810laitteella esiintynyt.
Työkoneeni äänikortti ei tukenut kuin muutamaa eri puskurikokoa. Suurella puskurilla ääneen aiheutui häiritsevää viivettä. Pienemmällä taas Drums ei usein ehtinyt kirjoittaa dataa puskuriin tarpeeksi nopeasti, ja äänien alkuja jäi monesti jonkin verran kuulumatta.
44100 Hz ja 22050 Hz näytetaajuuksilla esiintyi vinkuvaa häiriöääntä. Näitä ongelmia ei ollut N810laitteella joten jätin ne huomioimatta.
3.3 Melodyohjelma
Melodykosketinsoitin käyttää hyvin paljon samaa ohjelmakoodia kuin Drums. Suurin periaatteellinen ero on, että tiedostosta lukemisen sijaan ääni luodaan funktiolla. Drumsin toimintaperiaatetta vastaava äänitiedostojen toistaminen olisi vaatinut suuren määrän äänidataa. Äänensummausfunktio ja ALSAvirtaan kirjoittava funktio ovat täysin samoja.
Ääniä soittava funktio on muokattu Drumsin vastaavasta. Myös Main ja Idle
silmukoiden käyttö on vastaavaa. Callbackfunktion toteutus on hieman monimutkaisempi kuin Drumsissa. Se huomio myös painikkeen vapauttamisen. Näin Melodylla voidaan soittaa eri pituisia ääniä. Melodyn näyttö Maemoympäristössä työkoneellani on esitetty kuvassa 3. Melodyn ohjelmakoodi on saatavilla internetistä [8].
Kuva 3: Melody
Melody on kosketinsoitin yhden oktaavin koskettimilla. Erilaisia ääniä on 7: FM, Organ, Sin LFO, Sin, Triangle, Saw ja Square (ks. Liite 5). FMinstrumentissa sinifunktion taajuutta ja vaihetta moduloidaan toisella sinifunktiolla. Organ perustuu urkujen ääniaallon mallinnukseen kahdeksalla summatulla sinikomponentilla. Siinä käytetään myös tremoloefektiä. Sin LFO instrumentissa ääni on sinifunktiolla tuotettua, mutta äänen taajuutta ja vaihetta moduloidaan matalataajuisen oskillaattorin avulla. Loput äänet
ovat nimensä mukaisien oskillaattorien ääntä. Oskillaattorien aaltomuodot on esitetty kuvassa 4.
Kuva 4: Oskillaattorien aaltomuodot [36]
Äänialaa Melodyssa on kuusi oktaavia ja kulloinkin soitettavaa oktaavia voidaan säätää Octave up ja Octave down painikkeilla. Chordpainikkeesta soitetaan Cduurisointu. Kill All hiljentää kaikki soivat äänet. Se on ohjelmoitu virheellisesti soimaan jäävien äänten varalta.
Organäänellä Chordpainiketta painettaessa ääni ei toistu oikein, vaan se pätkii ja särkyy. Ongelma johtuu mitä ilmeisemmin N810laitteen laskentatehon riittämättömyydestä, koska kehitysympäristössä samaa ongelmaa ei esiintynyt. Ongelma herätti mielenkiintoni N810laitteen laskentatehon riittävyydestä musiikkikäytössä, minkä takia päätin testata Melodyinstrumentin ja N810laitteen suorituskykyä. Testin tulokset ovat kappaleessa 3.5.
3.4 Karaokeohjelma
Karaoke on yksinkertainen karaokeohjelma, jonka tarkoitus on esittää, kuinka yhtäaikainen toisto ja äänitys voidaan toteuttaa N810laitteella. Se on ulkoasultaan yhtä pelkistetty kuin Drums ja Melody, joten useista karaokeohjelmista tuttuja graafisia ominaisuuksia, kuten animoitu kappaleen sanojen näyttö, siinä ei ole. Karaoke hyödyntää samaa ohjelmakoodia kuin Drums. Karaoken näyttö Maemoympäristössä työkoneellani on esitetty kuvassa 5. Karaoken ohjelmakoodi on saatavilla internetistä [8].
Kuva 5: Karaoke
Kuten Drums ja Melody myös Karaoke käytti aluksi 32 kHznäytetaajuutta. 32 kHz
näytetaajuisen taustaraidan toisto ei tuottanut ongelmia, mutta äänitetty raita toistui liian nopeana ja korkeammalla taajuudella kuin se oli äänitetty, mikä viittasi raidan toistoon liian suurella näytetaajuudella. Lisäksi yhtäaikainen taustaraidan toisto ja lauluraidan äänitys tuotti paljon häiriöääntä. Ongelma selvisi tulostamalla äänityskahvan parametreja.
Äänityksen näytetaajuudeksi paljastui 8kHz, ja sitä ei ollut mahdollista vaihtaa. Lisäksi N810laite äänittää ainoastaan yhden kanavan. Näistä syistä asetin myös toiston 8 kHz:n näytetaajuuteen ja yhteen kanavaan. Olisin voinut ratkaista ongelman myös
prosessoimalla äänitetyn raidan korkeampaan näytetaajuuteen ja kahdelle kanavalle, mutta toteutin yksinkertaisemman ratkaisun ajanpuutteen vuoksi.
8 kHz näytetaajuus on mahdollisesti peräisin Nokian historiasta puhelinvalmistajana.
Puheen ymmärrettävyyden kannalta olennaisimmat taajuudet ovat alle 4 kHz:n taajuuksilla, jotka toistuvat Nyquistin teoreeman mukaan jo 8 kHz näytetaajuudella [11].
Korkeampien taajuuksien esittäminen edellyttää korkeampaa näytetaajuutta, joka tarkoittaa suurempaa määrää siirrettävää dataa.
Äänittäessä esiintyy latenssia, joka aiheutuu äänityspuskurista. Puskuria pienentämällä latenssia voidaan pienentää, mutta liian pieni puskuri aiheuttaa äänen pätkimistä ja säröytymistä. Karaoken puskurin säädin siten, että latenssiksi muodostuu 25 ms.
Pienemmällä latenssilla ääni pätki jonkin verran. 25 ms viive äänitetyn lauluraidan ja taustaraidan välillä on tarkasti kuunneltaessa kuultavissa, joten toistettaessa lauluraidan tiedostoosoitinta siirretään aluksi latenssia vastaava tavumäärä eteenpäin. Näin raidat toistuvat synkronoituna.
3.5 Melodyohjelman suorituskykytestaus
Rajasin ohjelmieni suorituskyvyn perusteellisen arvioinnin tämän työn ulkopuolelle rajallisen ajan takia. On kuitenkin ilmeistä, että ohjelmani voisivat olla suuremmalla panostuksella laskennallisesti vähintään hieman kevyempiä. Idlesilmukan käytön takia ohjelmani kuluttavat kaiken prosessoriajan, jota niille tarjotaan. Huolellisella säieohjelmoinnilla ja testauksella Idlesilmukan funktiokutsut voitaisiin rajoittaa oikeasti tarpeelliseen määrään.
Melodyn laskennallisten vaatimusten testaus oli mielenkiintoisinta, koska ainoastaan sitä ajettaessa N810:n laskentateho vaikutti loppuvan. Lisäksi Melodyn eri äänien laskennallisissa kompleksisuuksissa on eroa toisiinsa nähden. Drums ja Karaoke toistavat
äänitiedostoja, minkä takia kompleksisuus muuttuu ainoastaan äänitiedoston näytetaajuutta, bittisyvyyttä tai kanavien määrää muuttamalla.
Taulukossa 6 on selvitetty erittäin karkeasti Melodyohjelman suhteellista laskentatehon tarvetta N810laitteella. Topohjelman avulla saamani prosenttiosuudet vaihtuivat jokaisella ohjelman päivityskerralla muutaman prosenttiyksikön alueella, mutta prosenttiyksikön tarkkuudella arvioimani osuudet antavat virheestään huolimatta käsityksen suuruusluokasta. Kokeessa käytin Melodyinstrumentista muokattuja versioita, joissa kaikki soitetut äänet jäävät soimaan kunnes Kill All painiketta painetaan. Näin pystyin likimääräisesti arvioimaan laskennan tarvetta, kun yksi tai useampi ääni soi. Näytetaajuus ja kanavien määrä ovat muutettavissa vakioiden arvoja säätämällä ja kääntämällä ohjelma uudelleen. Bittisyvyyttä en muuttanut, koska se olisi vaatinut suurempia muutoksia ohjelmakoodiin.
Taulukko 6: Melodyohjelman prosessoriajan käyttö yhden äänen soidessa
Instrumentti 32 kHz, 16 bit, stereo 16 kHz, 16 bit, mono
FM 25% 7%
Organ 50% 20%
Sin 16% 4%
Laskentaa tarvitaan 16 kHz mono versiossa neljäsosa 32 kHz stereo version laskennasta, koska jokaisen näytteen arvo joudutaan laskemaan erikseen ja näytetaajuuden kaksinkertaistuessa myös näytteiden määrä aikayksikössä kaksinkertaistuu. Toinen laskennan määrän puolittuminen johtuu kanavien määrän puolittumisesta. Käytetyt algoritmit pysyivät täysin samoina. Ilmeisesti Idlesilmukan toiminnan takia tämä ei suoraan näy prosenttiosuuksissa, mutta kuitenkin laskentaosuus on selvästi pienempi jokaisella kokeen instrumentilla
Seuraavassa kokeessa laskin yhtäaikaisesti ilman korvin havaittavaa pätkimistä toistuvien äänien määrän. Kokeessa oletin, että N810laitteen laskentateho loppuu, kun äänentoisto
alkaa pätkiä. Koetta varten laskin 16 kHz mono ohjelman instrumenttien äänenvoimakkuutta äänen säröytymisen välttämiseksi. Tulokset on esitetty taulukossa 7.
Ne viittaavat selkeämmin laskennallisen kompleksisuuden vähenemiseen yhteen neljäsosaan.
Taulukko 7: Melodyohjelman yhtäaikaisesti soivien äänten määrä
Instrumentti 32 kHz, 16 bit, stereo 16 kHz, 16 bit, mono
FM 3 13
Organ 1 5
Sin LFO 4 15
Sin 5 21
Triangle 4 16
Saw 4 18
Square 5 20
3.6 Tulosten yhteenveto
Aluksi kartoitin Linuxin virtuaaliinstrumentit oman ohjelmointityöni pohjaksi.
Löytämäni virtuaaliinstrumentit osoittautuivat vaikeasti hyödynnettäviksi. Niiden ohjelmakoodi on monimutkaista ja sitä on paljon. Lisäksi niissä on käytetty säieohjelmointia, jota en itse toistaiseksi hallitse. Virtuaaliinstrumenteista ei ole dokumentaatiota saatavilla, mikä vaikeuttaa lähdekoodin hyödyntämistä entisestään.
Ohjelmointi onnistui kuitenkin ALSAkirjaston käytöstä kirjoitetun oppaan perusteella [32].
Toteutin Drumsrumpukoneen, Melodykosketinsoittimen ja Karaokeohjelman.
Ohjelmani näyttävät kuinka musiikkiohjelmien ääniominaisuuksia voidaan ohjelmoida Nokia N810 laitteelle ALSAkirjastoa hyödyntäen. Ohjelmani ovat pelkistettyjä ja niiden ei ole sellaisenaan tarkoitus päätyä käyttöön. En tutustunut GTK+kirjastoon syvällisesti, koska virtuaaliinstrumenttien graafinen käyttöliittymä ei kuulunut työhöni.
En todennäköisesti hyödynnä GTK+kirjastoa kovinkaan tehokkaasti, esimerkiksi ohjelmani käyttävät globaaleja muuttujia funktioiden parametrien välittämisen sijasta.
3.7 Työn vaativuus ja työmäärä
Työtä tehdessä jouduin tutustumaan minulle vieraaseen Maemoympäristöön. Maemoon kuuluvien Hildon ja GTK+käyttöliittymäkirjastojen sekä ALSAäänikirjastoon tutustuminen hidastivat etenkin Drumsin ohjelmointia. Toisaalta GTK+ohjelman rakenteen ymmärtäminen helpottui, koska osaan OpenGLgrafiikkakirjaston perusteita.
Main ja Idlesilmukoiden sekä callbackfunktioiden käsitteet olivat siis minulle jossain määrin tuttuja. En perehtynyt minulle uusiin kirjastoihin syvällisesti, vaan ainoastaan sen verran kuin ohjelmani vaativat toimiakseen. Tarkempi tutustuminen kirjastoihin olisi tehnyt työmäärästäni liian suuren.
Ohjelmointityötäni helpottivat vuosien musiikkiharrastuksessa karttuneet lähtötietoni digitaalisesta äänestä ja äänisynteesistä. Nämä tiedot paranivat entisestään tehdessäni kandidaatintyön teoriaosan taustatutkimusta. Tiedoistani oli erittäin suuri hyöty ohjelmointityössä, ja ilman niitä en olisi pystynyt tekemään työtä tämän laajuisena.
Perustietoni Cohjelmoinnista olivat ohjelmointiosuuden edellytys. C++kielen ymmärtäminen oli tärkeää Linuxin virtuaaliinstrumentteja kartoittaessa.
Työn eri vaiheisiin kulunut työaika on esitetty taulukossa 8. Kohtaan muu työ sisältyy Linuxin virtuaaliinstrumenttien kartoitus, Maemoympäristön asennukset ja opetusmateriaaliin tutustuminen, demokappaleen tuottaminen N810laitteella, Melody
ohjelman suorituskykytestaus sekä MobiKidohjelmaan tutustuminen.
Eri ohjelmien ohjelmointiin kulunut aika ei suoraan kerro ohjelmien monimutkaisuudesta toisiinsa nähden. Drumsia ohjelmoidessani suuri osa ajasta kului ALSA ja GTK+
kirjastojen käytön opetteluun. Lisäksi sekä Melody että Karaoke hyödyntävät Drumsin ohjelmakoodia sellaisenaan ja muokattuna. Siksi Drumsin ohjelmointiin kulunut aika on
huomattavasti muita suurempi, vaikka siinä on vähiten ohjelmakoodia, ja se on toiminnaltaan yksinkertaisin. Äänen tallentaminen tekee Karaokesta Drumsia monimutkaisemman. Monimutkaisimman Melodysta tekee äänen funktiolla luomiseen liittyvät osat, joita ei ole Drumsissa eikä Karaokessa. Karaoken ja Melodyn monimutkaisuuden ero on helposti havaittavissa niihin käytetyistä ohjelmointiajoista.
Taulukko 8: Eri työvaiheisiin kulunut aika
Vaihe Aika tunteina
Alkuraportti ja seminaari 98
Ohjelmointi yhteensä 97
Drumsin ohjelmointi 55
Melodyn ohjelmointi 28
Karaoken ohjelmointi 14
Loppuraportin kirjoittaminen ja seminaari 75
Muu työ 69
Yhteensä 349
3.8 Tulosten tulkinta
Ohjelmointityöhön käyttämästäni ajasta päättelin, että ääntä toistava ja käyttäjän syötteisiin reagoiva ohjelmarunko on hyvin pitkälti hyödynnettävissä eri periaatteilla ääntä tuottavissa ohjelmissa. Virtuaaliinstrumentin ääntä tuottavat algoritmit oli melko helppo ohjelmoida eri periaatteen mukaisiksi, kuten Drumsin muokkaaminen Melodyksi osoitti. Pystyin myös muokkaamaan ohjelmarunkoa eri käyttötarkoituksen, mutta samoja ominaisuuksia sisältävän ääniohjelman tarpeisiin. Tämän osoitti Drumsin muokkaaminen Karaokeksi. On kuitenkin muistettava, että ohjelmakoodin perinpohjainen ymmärtäminen on välttämätöntä ohjelmakoodia hyödynnettäessä. En pystynyt hyödyntämään Linuxin virtuaaliinstrumenttien ohjelmakoodia omissa ohjelmissani.
ALSA on matalan tason äänikirjasto, mutta sen käyttö ei ollut kohtuuttoman vaikeaa, vaikka en ollutkaan ohjelmoinut ääniohjelmia aikaisemmin. GTK+käyttöliittymäkirjasto tarjosi helposti käytettävät työkalut ohjelman reaaliaikaisuuden toteuttamiseen. Virtuaali
instrumenttien ohjelmointityössä tärkeimmäksi asiaksi vaikuttaisi muodostuvan digitaalisen äänen käsittelyyn ja äänisynteesiin liittyvien algoritmien ymmärtäminen.
4 POHDINTA
Tässä luvussa vertaan ohjelmiani UMSIChankkeen MobiKidpilottitutkimuksen ohjelmaan sekä JamMosovelluksen eri toimintatapojen vaatimuksiin. Arvioin ohjelmieni merkitystä UMSIChankkeelle. Pohdin myös, miten ohjelmiani voisi ja olisi syytä kehittää tulevaisuudessa.
4.1 MobiKid ja Karaokeohjelmien vertailu
MobiKid on Oulun yliopiston pilottitutkimus, jossa on tuotettu MobiKidkaraokeohjelma.
Ohjelma on toteutettu Nokia N800sarjan laitteille ja suunnattu lapsille. MobiKid vastaa toiminnallisuudeltaan omaa Karaokeohjelmaani, joten on perusteltua vertailla ohjelmia.
Ohjelmien erot selittyvät ohjelmien eri käyttötarkoituksilla. MobiKid on tarkoitettu lasten käytettäväksi. Karaoke esittää, miten karaokeohjelmalta vaaditut ääniominaisuudet voidaan toteuttaa N810laitteella. Syvällinen tutustuminen MobiKidin toimintaan ei ollut mahdollista, koska ohjelmakoodi ei ollut saatavillani.
MobiKid etenee vaiheittain ruudusta toiseen. Ohjelman käynnistyttyä valitaan haluttu kappale. Lauluraita äänitetään ja äänitetty raita kuunnellaan yhdessä taustaraidan kanssa.
Lopuksi äänitetty raita lähetetään sähköpostilla. Ohjelma etenee aina samassa järjestyksessä samojen vaiheiden kautta, joten sen käyttö on helppo oppia. Karaoke perustuu yhteen ruutuun, jossa kaikki toiminnallisuudet ovat käytettävissä painikkeita painamalla.
MobiKidin toteutuksessa on panostettu ulkoasuun ja käyttöliittymään. Sen eri ruudut ovat taustaltaan eri värisiä ja ruudulla on aina vain vähän informaatiota. Tekstiä ei ohjelmassa ole, vaan käyttäjä saa tietoa kuvina ja äänenä. Ohjelma toimii koko näytön suuruisena.
Käyttöjärjestelmän omat painikkeet ja muut ajettavat ohjelmat eivät siis häiritse käyttäjää. Ohjelma soveltuukin todennäköisesti hyvin lapsille. Karaoke toimii tavallisen kokoisessa ikkunassa ja sen käyttö vaatii lukutaitoa.
Vaikka MobiKid vaikuttaa ominaisuuksiltaan melko valmiilta, on siinä käytettävyyttä heikentäviä virheitä. Äänitetty lauluraita ei toistu synkronoituna taustaraitaan. Ohjelma kaatuilee melko usein. Välillä näyttöruutu muuttuu valkoiseksi, vaikka ohjelman toiminta muuten jatkuukin. Karaoke toimi omassa käytössäni lähes virheittä. Ainoastaan taustaraita jäi usein soimaan musiikin loputtua. Huomasin virheen, koska komentoriville ei tulostunut ilmoitusta taustaraidan toiston loppumisesta.
MobiKidissa on toteutettu samat äänitoiminnallisuudet kuin omassa Karaoke
ohjelmassani. Molemmissa äänitetään lauluraita samalla, kun taustaraita soi. Karaokessa tosin voi kuunnella molemmat raidat yhdessä tai erikseen useaan kertaan sekä äänittää lauluraidan kuuntelematta taustaraitaa. Molemmat ohjelmat äänittävät 8 kHz näytetaajuudella yksikanavaista ääntä. MobiKid käyttää tiedostomuotona wavformaattia, kun taas Karaokessa äänitetty raita tallennetaan rawmuodossa, joka tässä tapauksessa on wav ilman otsikkotietoja. MobiKidin taustaraidat ovat mp3muodossa ja niitä tulee ohjelman mukana viisi kappaletta. Karaoke käyttää ainoassa taustaraidassaan samaa raw
formaattia kuin äänitykseen.
4.2 Tulosten merkitys
Ohjelmani todistavat, että Nokia N810 laitteelle voidaan ohjelmoida toimivia musiikkiohjelmia. Laitteen suorituskyky riittää ainakin laskennallisesti kevyiden ja muistivaatimuksiltaan pienten ohjelmien ajamiseen. Omat sovellukseni toimivat reaaliajassa, ja käyttöä merkittävästi häiritseviä viiveitä tai häiriöääniä ei esiintynyt.
Omat virtuaaliinstrumenttini ovat soittamiskelpoisia, minkä voi kuulla äänittämästäni demokappaleesta. Kappale on äänitetty työkoneellani Audacityohjelmalla usealle eri raidalle. Jokainen raita on soitettu N810laitteella, joko Drumsilla tai Melodylla.
Laitteella soittamani äänen vein työkoneelleni kytkemällä kaapelin N810:n kuulokeliitännän ja työkoneeni mikrofoniliitännän välille. Demokappale on kuultavissa internetistä mp3muodossa [8].
Karaoke täyttää ääniominaisuuksiltaan UMSIChankkeen JamMosovelluksen Karaoke
toiminnon vaatimukset. Lauluraita voidaan äänittää taustaraitaa kuunnellessa ja molemmat raidat voidaan tämän jälkeen kuunnella yhdessä [33].
Virtuaaliinstrumenttini täyttävät osan JamMosovelluksen Improvisointi
toiminnallisuuden vaatimuksista. Yhdistettynä Karaokesovelluksen äänitys ja toistomahdollisuuteen myös Improvisaatiotoiminnon yksinkertaisemmat ääniominaisuudet olisivat toteutettu. Toistuvien ja yksittäisten äänien lisääminen kappaleeseen, kappaleen keston ja äänen korkeuden muuttaminen, osien leikkaaminen ja kopiointi, sekä instrumenttien vaihtaminen ei olisi edelleenkään mahdollista [33].
Ohjelmani toteuttavat suuren osan JamMosovelluksen toiminnallisuudesta. On perusteltua olettaa, että tekemästäni työstä voi olla hyötyä UMSIChankkeen aikana.
4.3 Tulevaisuus
Virtuaaliinstrumenttini ja Karaokeohjelmani jäivät melko vaatimattomiksi säädettävyydeltään, liitettävyydeltään, käytettävyydeltään ja tehokkuudeltaan, koska kandidaatintyö on pieni projekti. Virtuaaliinstrumenttia soittaessa soittaja voisi haluta säätää esimerkiksi yksittäisten äänten sekä koko ohjelman äänenvoimakkuutta. Tätä ominaisuutta ei ohjelmissani ole, vaan ainoa mahdollisuus säätää äänenvoimakkuutta on koko laitteen äänenvoimakkuuden muuttaminen. Virtuaaliinstrumenttini ovat äänenlaadultaan vaatimattomia verrattuna Linuxin virtuaaliinstrumentteihin. Ne voisivat kuulostaa mielenkiintoisemmilta, mikäli niihin olisi toteutettu monista virtuaali
instrumenteista tuttuja ominaisuuksia kuten erilaiset suotimet ja muut efektit. Toisaalta N810laitteen laskentaresurssit saattavat rajoittaa ylimääräistä prosessointia.
Virtuaaliinstrumenttien kannattaisi tukea MIDIprotokollaa, koska se mahdollistaa instrumenttien soittamisen ulkoisilla ohjainlaitteilla, esimerkiksi MIDIkoskettimilla.
Tosin Nokia N810 laitteen liitännät saattavat hankaloittaa ulkoisten musiikkilaitteiden
liittämistä. Joka tapauksessa MIDItuen ansiosta jokaiseen instrumenttiin ei tarvitsisi ohjelmoida käyttöliittymää vaan varsinainen soittaminen voisi tapahtua erillisellä ohjelmalla ja virtuaaliinstrumentissa luotaisiin ainoastaan kontrollidatan mukainen ääni.
Käyttöön tulevien virtuaaliinstrumenttien käyttöliittymä on syytä suunnitella ja toteuttaa huolella sekä mahdollisimman tehokkaasti. En pohtinut ohjelmoidessani ohjelmieni laskentatehon tarvetta. Käyttäjille tarkoitettuja instrumentteja toteutettaessa ohjelmien ja niiden käyttämien algoritmien laskennalliset kompleksisuudet on tärkeä kartoittaa.
Tässä työssä käytettiin vain muutamaa äänisynteesin periaatetta. Niiden arvioiminen laskennan kannalta kulloiseenkin käyttötarkoitukseen ja kevyimpien periaatteiden hyödyntäminen voi vähentää laskennan määrää merkittävästi. Myös käytettävän laitteen kaiuttimet, mikrofoni ja muut ominaisuudet tulee ottaa huomioon virtuaaliinstrumentteja suunnitellessa turhan laskennan välttämiseksi. Esimerkiksi perusteettoman korkean näytetaajuuden käyttäminen aiheuttaa turhaa laskentaa, ja monimutkaisen ääniaallon luominen lisäävällä synteesillä voi vaatia kohtuuttoman paljon sinikomponentteja.
Tämän työn oli tarkoitus antaa tietoa UMSIChankkeen ohjelmointityötä varten. UMSIC alkaa 1.9.2008 ja päättyy 31.8.2011. Uskon, että omat kokemukseni virtuaali
instrumenttien ohjelmoinnista tukevat alusta asti ohjelmoitavien instrumenttien ohjelmointityötä Maemoympäristössä. Virtuaaliinstrumenttien kartoitukseni osoitti, että olemassa olevan avoimen lähdekoodin hyödyntäminen voi olla vaikeaa.
5 YHTEENVETO
Työn teoriaosuudessa muodostin kokonaiskuvan musiikkiteknologiasta, ja selvitin sen käsitteitä. Musiikkiteknologia paljastui yllättävän laajaksi tieteenalaksi, joka soveltaa tietotekniikkaa moniin tarkoituksiin. Musiikkiteknologiaa hyödynnetään psykologiassa, kasvatustieteissä ja kognitiivisissa tieteissä.
Työn käytännön osuudessa kartoitin Linuxkäyttöjärjestelmän avoimen lähdekoodin virtuaaliinstrumentit ja ohjelmoin musiikkiteknologian ohjelmia Nokia N810 Internet Tablet laitteelle. N810:n käyttöjärjestelmä on Linuxjohdannainen, joten olemassa olevaa avointa lähdekoodia olisi ollut mahdollisuus hyödyntää. En kuitenkaan osannut hyödyntää avointa lähdekoodia, vaikka virtuaaliinstrumentteja löytyi useita. Ongelmiksi muodostuivat puutteelliset ohjelmointitaitoni, ohjelmakoodin suuri määrä, ohjelmien monimutkaisuus ja puutteellinen dokumentaatio. Omat ohjelmani ohjelmoin itse alusta asti.
Ohjelmoin rumpukoneen, joka toistaa äänitiedostoja. Kosketinsoittimeni puolestaan luo äänensä funktioiden avulla kokonaan ilman äänidataa sisältäviä tiedostoja. Virtuaali
instrumenttini valmistuivat nopeammin kuin odotin, joten ohjelmoin vielä karaokeohjelman. Karaokeohjelmassani on toteutettu ainoastaan ääneen liittyvät ominaisuudet.
Ohjelmistani tuli yksinkertaisia ja pelkistettyjä kuten tarkoitukseni olikin. Ne kuitenkin osoittautuivat toimiviksi. Paremmalla käyttöliittymällä ja viimeisteltyinä ne olisivat myös käytettäviä. Tällaisinaan ohjelmani ainoastaan näyttävät, miten ääntä voidaan tuottaa N810laitteella.
LÄHDELUETTELO
[1] Yasushi Akiyama: PlaceAndPlay: a digital tool for children to create and record music, April 2008, CHI '08: Proceeding of the twentysixth annual SIGCHI conference on Human factors in computing systems, Publisher: ACM
[2] Tetsuaki Baba, Taketoshi Ushiama, Kiyoshi Tomimatsu: Freqtric drums: a musical instrument that uses skin contact as an interface, 2007, New Interfaces For Musical Expression, Proceedings of the 7th international conference on New interfaces for musical expression
[3] Rolf Bader: Turbulent — model of flutelike musical instrument soundκ ε production, 2005, Publisher: Springer London
[4] Lori A. Custodero, Pia Rebello Britto, Jeanne BrooksGunn, Musical lives: A collective portrait of American parents and their young children, OctoberNovember 2003, Journal of Applied Developmental Psychology, Volume 24, Issue 5, Pages 553572 [5] Marek Dziubinski, Piotr Dalka and Bozena Kostek: Estimation of Musical Sound Separation Algorithm Effectiveness Employing Neural Networks, 2005, Journal of Intelligent Information Systems, Volume 24, Numbers 23 / March,
[6] Eck, D.; Schmidhuber, J.: Finding temporal structure in music: blues improvisation with LSTM recurrent networks, Neural Networks for Signal Processing, 2002.
Proceedings of the 2002 12th IEEE Workshop on 46 Sept. 2002 Page(s):747 – 756
[7] Thomas Fischer, Wing Lau: Marble track music sequencers for children, June 2006, IDC '06: Proceedings of the 2006 conference on Interaction design and children, Publisher: ACM
[8] Gynther, Mikko: Avoimen lähdekoodin musiikkiteknologia, kandidaatintyön internetsivu, joka sisältää työhön liittyvän sähköisen materiaalin http://www2.lut.fi/~mgynther/kt/, viitattu 29.7.2008
[9] GTK+ Reference Manual http://maemo.org/api_refs/4.1/gtk+2.02.10.12/libgtk2.0/, viitattu 29.7.2008
[10] Billy Harris, Martha SummaChadwick: A computerized system for Neurologic Music Therapy, December 2005, Journal of Computing Sciences in Colleges, Volume 21 Issue 2, Publisher: Consortium for Computing Sciences in Colleges
[11] Helsinki University Central Hospital The BioMag Laboratory : Aivojen rakenne ja toiminta: Kuulo http://www.biomag.hus.fi/braincourse/L7.html, viitattu 30.7.2008
[12] Hydrogen, http://www.hydrogenmusic.org/, avoimen lähdekoodin rumpukone, viitattu 9.6.2008.
[13] IK Multimedia Sample Moog –virtuaaliinstrumentti http://www.ikmultimedia.com/
Main.html?samplemoog/index.php, viitattu 9.6.2008.
[14] Andrew J. Johnston, Benjamin Marks: Partial reflections: interactive virtual instruments controlled by sound, June 2007, C&C '07: Proceedings of the 6th ACM SIGCHI conference on Creativity & cognition, Publisher: ACM
[15] Maemo http://www.maemo.org, Nokian tukema ympäristö Internet Tabletien ohjelmille, viitattu 9.6.2008.
[16] Maemo Chinook Training Material http://maemo.org/development/training/, viitattu 29.7.2008
[17] Maemo Technology Overview Chapter 3: Maemo Platform Overview http://maemo.org/maemo_training_material/maemo4.x/html/maemo_Technology_Overvi ew/Chapter_03_maemo_Platform_Overview.html, viitattu 9.6.2008.
[18] Ian McKinnon: Children's music journey: the development of an interactive software solution for early childhood music education, October 2005, Computers in Entertainment (CIE), Volume 3 Issue 4, Publisher: ACM
[19] MIDI Manufacturers Association Incorporated: Tutorial: The Technology of MIDI Part 1: Overview http://www.midi.org/aboutmidi/tut_techomidi.php, viitattu 29.7.2008
[20] Riia Milovanov, Minna Huotilainen, Vesa Välimäki, Paulo A.A. Esquef, Mari Tervaniemi: Musical aptitude and second language pronunciation skills in schoolaged children: Neural and behavioral evidence, 15 February 2008, Brain Research, Volume 1194
[21] Don Morgan, Sanzheng Qiao: Accuracy and stability in massspring systems for sound synthesis, May 2008, C3S2E '08: Proceedings of the 2008 C3S2E conference, Publisher: ACM
[22] Nuria Oliver, Fernando FloresMangas: MPTrain: a mobile, music and physiology
based personal trainer, September 2006, MobileHCI '06: Proceedings of the 8th conference on Humancomputer interaction with mobile devices and services, Publisher:
ACM
[23] Chika Oshima, Kazushi Nishimoto, Masami Suzuki: Family ensemble: a collaborative musical edutainment system for children and parents, October 2004, MULTIMEDIA '04: Proceedings of the 12th annual ACM international conference on Multimedia, Publisher: ACM
[24] Matthew Osment, Todd Reimer: Music by ear: an interactive system to teach old
time fiddle, June 2006, ICLS '06: Proceedings of the 7th international conference on Learning sciences, Publisher: International Society of the Learning Sciences
[25] Rabenstein, R.; Petrausch, S.; Sarti, A.; De Sanctis, G.; Erkut, C.; Karjalainen, M.:
Blockedbased physical modeling for digital sound synthesis, March 2007, Signal Processing Magazine, IEEE Volume 24, Issue 2
[26] Nicholas Reynolds: Musical composition and creativity in an ICTenriched learning environment: a case study, January 2003, CRPIT '03: Proceedings of the 3.1 and 3.3 working groups conference on International federation for information processing: ICT and the teacher of the future Volume 23
[27] Duk Shin, Atsushi Katayama, Kyoungsik Kim, Hiroyuki Kambara, Makoto Sato and Yasuharu Koike: Using a MyoKinetic Synthesizer to Control of Virtual Instruments, 2006, Publisher: Springer Berlin / Heidelberg
[28] ChuenTsai Sun; JiLung Hsieh; ChungYuan Huang: Using Evolving Agents to Critique Subjective Music Compositions, Computational Intelligence and Security, Nov.
2006, 2006 International Conference on Volume 1, Page(s):474 – 480
[29] Tero Tolonen, Vesa Välimäki, Matti Karjalainen: Evaluation of Modern Sound Synthesis Methods, Helsinki University of Technology, http://www.acoustics.hut.fi/publications/reports/sound_synth_report.pdf, viitattu 9.6.2008.
[30] Martin Tomitsch, Thomas Grechenig, Karin Kappel, Thomas Költringer:
Experiences from designing a tangible musical toy for children, June 2006, IDC '06:
Proceedings of the 2006 conference on Interaction design and children, Publisher: ACM
[31] Toontrack EZdrummer –virtuaaliinstrumentti
http://www.toontrack.com/ezdrummer.asp, viitattu 9.6.2008.
[32] Jeff Tranter: Introduction to Sound Programming with ALSA, http://www.linuxjournal.com/article/6735, viitattu 28.7.2008
[33] UMSICDoW (Description of Work), for FP7ICT20072 (Accessible and Inclusive ICT), viitattu 9.6.2008.
[34] Christophe Vergez and Patrice Tisserand: The BRASS Project, from Physical Models to Virtual Musical Instruments: Playability Issues, 2006, Publisher: Springer Berlin / Heidelberg
[35] Christian Vincenot: An introduction to Linux sound systems and APIs, http://www.linux.com/articles/113775, viitattu 9.6.2008
[36] Wikipedian kuva aaltomuodoista,
http://en.wikipedia.org/wiki/Image:Waveforms.svg, viitattu 29.7.2008