Semesteroppgave, Interaktiv musikk, Høst 2013
Ola Haukland Andresen
I denne semesteroppgaven har jeg programmert en patch til iOS-applikasjonen MobMuPlat. Patchen er programmert til å fungere som et akkordinstrument med ferdig sammensatte akkordharmonier. Patchen kan altså brukes både på datamaskiner og på iOS-enheter som iPhone og iPad hvis man har MobMuPlat.
Patchen bygger på en idé fra en tidligere oppgave jeg har laget, hvilket var en litt enklere patch. Den type funksjon denne patchen tilbyr er en funksjon jeg over lengre tid har savnet litt i en del tradisjonelle instrumenter, nemlig å kunne lage en glidende overgang mellom akkorder. Man har på noen keyboard en spake som kan justere pitch, men dette er først og fremst egnet for å justere enkelttoner ikke helt ulikt det man på en gitar gjør når man bender strenger. På fretless- og bassgitarer har man i teorien samme funksjon, i tillegg på tradisjonelle strykeinstrumenter, men det er ikke først og fremst brukt for å kunne gli sømløst over hele akkorder som sådan. Det kanskje mest tradisjonelle instrumentet der det derimot er vanlig, er pedal steel guitar og til dels også steel guitar, der man kan veksle mellom akkorder uten at det høres hakkete ut, hvilket er tilfellet med vanlige gitarer på grunn av stålet som markerer hvert bånd på halsen. Pedal steel guitar skiller seg på denne måten veldig ut blant tradisjonelle instrumenter, i og med at det å kunne gjøre nettopp dette, takket være slideren og bending av strenger med pedaler, er instrumentets essens.
Jeg fikk derfor lyst til å skape noe med den samme funksjonen som en pedal steel guitar. Der man på en pedal steel guitar har muligheten til med pedalene å styre hver enkelt streng hver for seg, er denne patchen atskillig simplere i måten den skalerer hele, fiksede harmonier. Dette gjøres her med touch-kontrollere (Miranda, Wanderley, s. 31) i form av slidere - enkle spaker som styrer opp og ned mellom akkorder. Jeg har i tillegg til akkordene lagt inn muligheten for også å kunne justere to enkelttoner samtidig, hvilket åpner opp for muligheten for å bruke det som noe litt mer enn kun et akkordinstrument for akkompagnement.
For lettere å kunne forklare patchens struktur har jeg valgt å kategorisere enkelttonene med bokstaven E og moll-grunntonene og dur-grunntonene henholdsvis M og D. V står for volum. M og D kobles etter hvert sammen til MD, som igjen kobles til EMD og til slutt EMDV.
Lydmessig består patchen av én grunnleggende sinustone - en grunnleggende komponent i Pure Data, hvilket er det grafiske programmeringsspråket jeg har brukt for å programmere lydpatchen. For å skape en sinustone må man først sette inn et objekt man kaller “osc~” (E6 og MD3). Osc står for oscillator, og tilde-tegnet til slutt betyr at dette er et signalobjekt, eller rettere sagt et objekt som lager lyd.
Den andre grunnleggende komponenten er et objekt ved navn “dac~” (EMDV), hvilket står for digital audio converter. Dette er det objektet som sender signalet til lydkortet i maskinen; for å sende et stereosignal til lydkortet må dac-objektet kobles til begge sine inlets i hvert øvre hjørne.
Hva slags tone som produseres, bestemmes av hvilken frekvensverdi som styres til signalobjektet. Over osc-objektet er det derfor i venstre inlet koblet til et tallobjekt (E5 og MD2) som angir tonens frekvens i Hz. Man må, litt avhengig av hva slags høyttaler og volum man har, skru opp dette tallet til rundt 100 Hz før man kan høre lyd.
Før denne lyden spilles av, er det lurt å kontrollere signalets styrke for beskytte høyttalere og hørsel. Derfor er det mellom osc-objektet og dac-objektet koblet inn et objekt (E7 og MD4) som ganger tallet med et desimaltall mellom 0 og 1 for å skalere signalverdien. I denne patchen har jeg satt sammen flere toner og derfor justert signalverdien litt forskjellig fra tone til tone, slik at noen blir mer fremtredende enn andre, som for eksempel bassen (MD.H4) som har den laveste frekvensen og dermed ikke lyder like sterkt.
I høyre inlet i EMD2 har jeg koblet inn en variabel volumkontroll. Denne utgjøres helt enkelt av en tallboks som er skalert fra 0 til 1, og dette er den horisontale volumslideren nederst i patchen.
Når flere toner er satt sammen som i denne patchen, dannes en såkalt additiv syntese . For å sette sammen flere toner setter jeg inn et pluss-objekt (EMD1) under de forskjellige sinustonene, og kobler alle inn i dette objektet. Dermed kan jeg danne polyfoniske harmonier og klanger. Siden jeg som sagt hadde lyst til å skape en måte å spille med glidende overganger mellom akkorder, er det i hver akkord-slider en rekkevidde fra topp til bunn med utgangspunkt i to spesifikke akkorder.
Sliderne for M og D er representert i den ferdige patchen på MobMuPlat-applikasjonen. Disse skalerer kun tall fra 0 til 1, hvilket vises i tallboksene (M2 og D2). For da å skalere mellom bestemte frekvensverdier er det derfor en multiplikasjonsboks (M3 og D3) og en plussboks koblet til en ny tallboks (M5 og D5). Denne patchen tar utgangspunkt i tonearten A og inkluderer de akkordene som fungerer best til låter som går i A-dur. For å konstruere en F#-moll, er det da tatt utgangspunkt i grunntonen for F#, nemlig 369.5 Hz. Når slideren er skrudd helt opp til 1, blir tallet nettopp 369.5. Bunnverdien for denne slideren er 277.2, hvilket er frekvensen for en H. For å skalere mellom disse tallene, måtte jeg derfor gjøre en del matematiske utregninger. Det var nemlig utfordringer knyttet til å legge verdiene rett inn i sliderne, og derfor måtte jeg finne en måte å for tallene å skaleres mellom bestemte verdier selv om slideren gikk fra kun 0 til 1.
For å skalere til opp fra ett bestemt tall til et annet, ble likningen ganske enkelt først å mulitplisere x med differansen mellom 369.5 og 277.2, nemlig 92.3. Under dette tilføyes et plussobjekt som helt enkelt adderer det minste tallet, nemlig 277.2. Dermed blir likningen 369.5 = 1*92.3 + 277.2 eller 277.2 = 0*92.3 + 277.2, og man kan skalere slideren stabilt fra topp til bunn (0 til 1) og treffe nøyaktige frekvenser. Frekvenstallene som sådan finnes i standardiserte tabeller ut fra A440 (pitch standard).
Da jeg bygde opp patchen, hadde jeg opprinnelig ikke det øverste systemet med, men slidere som var direkte koblet ned til M1 og D1. Jeg har koblet alle moll-frekvensene sammen til én tallboks og alle dur-frekvensene til én (M6 og D6). Jeg ser i ettertid at dette strengt tatt ikke var nødvendig, men jeg valgte å la det være sånn for i det minste å beholde oversikten over og begrense mylderet av koblinger ned til de ulike intervall-faktorene.
Selve rekkefølgen og plasseringen av de ulike akkordene i PD er mer eller mindre tilfeldig sammensatt, og det er ingen spesiell grunn til at dur-akkordene er lengst til høyre og enkelttonene lengst til venstre. Det er heller ikke noe veldig intuitivt over hvilke akkorder som er lagt inn i hvilke slidere. Hovedslideren for A-dur (D.D) går for eksempel fra en dyp A-dur til en oktav høyere, mens den andre bare har en heltones rekkevidde fra G til A. Jeg tenkte at de de ulike akkordene i utgangspunktet skulle være på toppen i hver slider, men for eksempel M.C har “hovedakkorden” H-moll nederst siden jeg gjerne ville koble den sammen med en D-moll (en akkord som i tonearten A-dur kan ha et gospelpreg over seg), men D-moll med lavere grunnfrekvens enn H-moll ville vært altfor dyp, og derfor er H-moll nederst og D-moll øverst. Noen akkorder går altså igjen i flere slidere, slik som C#-moll nederst i M.A og øverst i M.B, samt D-dur øverst i D.B og nederst i D.C.
Når flere tallbokser er koblet ned til en og samme objekt, som i siste instans determinerer signalverdien som sendes til osc-objektet, er det alltid slideren over tallboksen som blir endret som styrer det bestemte tallet. Dette gjør det mulig å koble ulike slidere til den samme tallboksen, i og med at i det man kommer nær en slider, så er det dens verdier som sendes ut som signal. Det betyr at sliderne også fungerer som knapper siden den man skrur på tar over for den andre.
Det er visse toner som ikke bør klinge sammen med visse akkorder. Derfor har jeg kuttet ut for eksempel sekund-intervallen (MD.I) fra moll-akkordene fordi den ikke passer særlig godt i en C#-moll - hvilket ville ha blitt C#-moll9. I andre enden har jeg kuttet ut 7-eren (MD.A) fra dur-akkordene for ikke å havne altfor langt innenfor blues-verdenens tonalitet. For å fylle hver akkord mest mulig, har jeg likevel multiplisert grunntonen flere ulike desimaltall, men da med to kvinter (*0.75 og *1.25) og tre grunntoner (*0.25, *0.5 og *3).
Den kanskje største utfordringen jeg støtte på da jeg lagde denne patchen, var hvordan jeg kunne koble sammen dur- og moll-akkorder i ett og samme system. Mens de har samme verdier for grunntone og kvint, skaper det dissonans dersom man ikke skiller den store og den lille tersen fra hverandre. Med mitt opprinnelige oppsett, ble alle akkordene enten moll eller dur. Derfor måtte jeg koble sammen i kryss MD.B1 og MD.C1 med MD.B2 og MD.C2. Dette gjør at når jeg klikker på en slider i moll-kategorien, er denne kun koblet til MD.B1, og da sendes samme tall, nemlig frekvensen for den lille tersen, ned til de to objektene under. Det samme gjelder dur-sliderne, som kun er koblet til MD.C1 og vil føre begge over i en stor ters-frekvens.
I begynnelsen hadde jeg også samme oppsett for enkelttonene, slik at de ulike sliderne alltid ville ta over for hverandre, men for å utvide mulighetene for rikere tonesammensetninger, lot jeg dem stå separat slik at de kan klinge samtidig. Den laveste går fra 277.2 Hz til 554.5 Hz, mens den andre begynner der den forrige slutter og går helt opp til 1205.6 Hz, hvilket er en A. Heller ikke her har jeg lagt mye vekt på å gjøre oppsettet fullstendig logisk.
For å kunne overføre PD-filen til MobMuPlat er det fra toppen av hver slider lagt til en kobling opp til et route-objekt, som identifiserer hver komponent og som gjør at man kan adressere hele oppsettet til MobMuPlat. I route-objektet skriver jeg inn det som skal adresseres, og så kommer det automatisk opp outlets man kan trekke koblinger fra for hver nye jeg legger til - i dette tilfellet 10 slidere. Disse identifiseres i MobMuPlat under “Prop”-fanen der man skriver inn for eksempel /slider1. Over dette objektet ordnes alt i rekkefølge i et “route list”-objekt og til sist et “receive fromGUI”-objekt helt øverst, som står for graphical user interface.
Jeg har altså ikke jobbet veldig mye med å konstruere et systematisk brukergrensesnitt. Dette skyldes i stor grad at patchen kun er basert på slidere, og det er veldig enkelt å lære seg oppsettet uansett. Noen få minutter med eksperimentering vil være tilstrekkelig for de fleste for enkeltvis å lære seg alle slidernes funksjon og sette dem sammen. Dermed er det ikke noe stort problem for en som bruker patchen for første gang at oppsettet er noe vilkårlig oppbygd.
Mange digitale musikkinstrumenter- og patcher, spesielt til mobil, har et veldig enkelt brukergrensesnitt og er enkle å lære. Riktignok gjør dette at de også fort kan bli ensformige og begrensede i lengden. Med enkelttone-sliderne håper jeg derimot å kunne tillegge patchen en ekstra dimensjon i og med at de kan klinge sammen og komplementere enda rikere akkorder samtidig som de med følsomhet kan brukes for å lage melodier over akkordene. Hvor enkelt dette er å mestre, vil delvis avhenge veldig av størrelsen på skjermen. På en iPad vil det være atskillig enklere å styre enkelttonene presist enn på en iPhone. Her vil man også oppleve større muligheter for fysisk ekspressivitet, da man med følsomhet kan danne ulike uttrykk mens man spiller. På en iPad vil det også bli en ordentlig bevegelse, noe som vil kunne gi publikum et inntrykk av selve interaksjonen mellom utøver og instrument. Blant annet fungerer det bra å legge til vibrato enkelttonene ved å presse en finger solid ned i skjermen mens man rister på hånda.
To muligheter jeg måtte velge mellom var om jeg skulle sette inn noe loadbang-objekt som kunne skru av og på lyden eller om jeg skulle ha kun en volum-kontroller som rett og slett skrudde lyden opp og ned. Jeg valgte det siste, hovedsakelig for å begrense antall enheter på den endelige patchen. Dermed spiller programmet egentlig av en kontinuerlig lyd, men muligheten er da altså til stede for å skru av og på volumet, og jeg lar det fungere som en av/på-knapp.
En annen utfordring som lå utenfor min kontroll, var vanskeligheten med å skru sliderne helt ned eller helt opp. Dette er en liten svakhet i måten MobMuPlat-sliderne fungerer, ettersom man noen ganger må man dra dem ned eller opp et par ganger før man “treffer” det riktige punktet der man får dratt slideren til riktig frekvens. Dette er en ulempe i og med at hele akkorden da blir forskøvet oppover og ikke høres bra ut. Igjen er dette enklere å få bukt med på en større skjerm.
En annen ulempe med patchen er at sliderne ikke alltid reagerer umiddelbart når man trykker på dem. Dette gjør det litt vanskelig å spille i et fast tempo. Likevel kommer dette seg med litt øving, når man forstår hvordan man mest effektivt aktiverer sliderne uten å forflytte dem for mye og spille feil tone. Etter litt øving med en iPad kan man begynne å lære seg ulike sammensetninger som høres fine ut. For eksempel en overgang mellom C#-moll, C-dur, H-moll og den dype A-duren med en sammenhengende A som enkelttone blir faktisk veldig harmonisk og fint å høre på. Det kan hende at en sånn patch kunne ha fungert bra for noen som lærer å spille musikk, i og med at den enkelt får fram hvilke akkorder som passer sammen.
Dette er et ferdig produkt som jeg nå, når jeg først har funnet fram til og lært nye funksjoner i PD, kunne ha laget mange liknende versjoner av mye raskere, og sannsynligvis også enda bedre siden det ville ha bygget på det jeg kan nå. Jeg påbegynte denne semesteroppgaven med svært begrensede programmeringsferdigheter, og alt jeg har lært ved å lage patchen reflekteres i det endelige resultatet som fremstilles her. Om det er enkel oppskrift uten svært komplekst programmerte funksjoner, er jeg i alle fall fornøyd med å ha laget et slags instrument som fungerer og som det faktisk er mulig å spille og lage melodier på. Om jeg ikke vier livet til å programmere musikk, kommer jeg allikevel kanskje til å få musikalsk glede av dette instrumentet.
Referanser
- Eduardo R. Miranda, Marcelo M. Wanderley: New digital musical instruments: control and interaction beyond the keyboard, 2006. Middleton.
- Alexander Refsum Jensenius, videoinstruksjon til lydsyntese: http://www.youtube.com/watch?v=XDjM56Q9wUo
- Tabell for notefrekvenser: http://www.seventhstring.com/resources/notefrequencies.html