?FLOOT - En fl?yteinspirert granular synth for iOS

I min semesteroppgave har jeg fors?kt a? lage digitalt elektronisk instrument som skal v?re intuitivt og enkelt a? bruke, og som oppfordrer til spontan lek og eksperimentasjon. Instrumentet er laget som en prototype-app til iPhone, og jeg har fors?kt a? benytte meg av de ulike typene inndatametodene som dette verkt?yet tilbyr pa? en lettfattelig og morsom ma?te.

NB! En rekke begrensninger og bugs i MobMuPlat har gjort at brukergrensesnittet fungerer mindre enn optimalt, og f?lgende er viktig a? vite for a? bruke appen:

  1. Man ma? ‘swipe’ horisontalt for a? skifte mellom skjermbildene.
  2. ‘setPage’-funksjonen virker ikke i landscape-format, sa? na?r man trykker pa? kontrollgrafknappen i avspillingsmodus, eller en av de forha?ndsprogrammerte grafvalgene vil man ende opp ‘mellom’ to skjermbilder. Man ma? derfor ‘swipe’ for a? komme til og fra disse pa? side 3 i appen.
  3. Det ga?r ikke ann a? spesifisere et ‘utvalg’ i samplegrafen automatisk fra PD, og man ma? derfor manuelt markere et nytt utvalg hver gang man har tatt opp en ny lyd.
  4. Man ma? holde telefonen flatt med skjermen opp na?r man aktiverer bla?sefunksjonen for a? fa? ‘t?rr’ lyd uten effekter (dette er manglende kalibrering fra min side).
  5. Dersom du ma? bla?se uforholdsmessig hardt for a? fa? effekt kan du pr?ve a? laste inn patchen pa? nytt, helst i stille omgivelser.
  6. Undo-funksjonen er buggy og bruker ganske lang tid.

Bakgrunn

Den opprinnelige ideen til instrumentet kom fra en kombinasjon av Ocarina-appen fra smule og det grafiske programmeringsspra?ket PureData. Ocarina-appen er en digital okarina (leirefl?yte) og ved a? bla?se inn i mikrofonen og holde over fire virtuelle hull med fingrene kan man spile melodier pa? en ma?te som ligger n?rt opptil en ekte okarina. Ocarina er pa? alle ma?ter et sv?rt vellykket digitalt instrument. Pa? den ene side er det en av de 20 mest nedlastede appene noensinne (smule.com, 2014). Pa? den annen side representerer appen en tilfredsstillende l?sning pa? problemet med forholdet handling-lyd i konstruksjonen av digitale instrumenter. Handling-lyd-relasjoner er et begrep Jensenius utvikler i sin doktoravhandling for a? beskrive instrumenter hvor forholdet mellom handling og resulterende lyd ikke styres av uunnga?elige og forutsigbare fysiske lover, typisk for elektroniske og digitale instrumenter (Jensenius 2007: kapittel 3). Med bakgrunn i forskning pa? lydpersepsjon pa?sta?r Jensenius at gode handling-lyd-design er n?dt til a? ta i ? ?betraktning va?r ?ecological knowledge of action-sound couplings? (Jensenius 2007: 32). Dette gjelder enten man velger a? ga? for et praktisk design, som bygger direkte pa? disse forventningene, eller et kreativt som utfordrer og spiller pa? det uforutsette. I utviklingen av Ocarina har smule valgt et i h?yeste grad praktisk design som ser seg fore a? v?re brukervennlig og gjenkjennelig, en tiln?rming Jensenius kritiserer for ofte a? f?re til kjedelige og uinspirerende instrumenter (dog 1.8 millioner nedlastinger kan pa?sta?s a? utfordre dette synet i tilfellet Ocarina [xyo.net 2014]).

Den andre kilden til inspirasjon var programmeringsspra?ket PureData, og n?rmere bestemt et objekt kalt array. Dette er en grafisk representasjon av innholdet i en tabell, og kan brukes til a? lagre lydfiler, tallrekker eller andre typer digital informasjon. I PureData kan man ogsa? bruke musepekeren til a? tegne direkte i disse grafene. Kombinerer du disse to elementene har du ba?de kjernen av og ma?let med min applikasjon. FLOOT er et fors?k pa? a? lage et digitalt bla?seinstrument som er like intuitivt a? bruke som Ocarina, hvor man ikke spiller toner pa? toner, men manipulerte lydopptak. Det er, for a? hente terminologi fra Jensenius, et fors?k pa? a? skape et eksperimentelt og kreativt konsept med et praktisk design (Jensenius 2007: 30).

Problemstilling

FLOOT baserer seg pa? sa?kalt granular syntese, en relativt avansert lydgenereingsmetode som tar utgangspunkt i et digitalt lydopptak. Det opprinnelige opptaket deles opp i ?rsma? enheter – sa?kalte ‘grains’ – som videre manipuleres og avspilles pa? ulike ma?ter for a? skape lyder som kan ligge sv?rt langt fra det opprinnelige opptaket. Denne formen for lydsyntese tar utgangspunkt i teknikker som for de fleste kan virke sv?rt uforsta?elige, og mange instrumenter som baserer seg pa? denne typen lydsyntese krever mye spesialisert kunnskap og ?velse for a? anvende. Derfor har en av de st?rste utfordringene ved utviklingen av min app v?rt nettopp brukervennligheten, og a? gj?re det mulig a? anvende den pa? givende ma?ter uten noen form for kunnskap. I arbeidet med a? balansere det avanserte og kreative med det intuitive og tilfredsstillende har jeg fokusert pa? tre hovedaspekter. Jeg ville lage et instrument som lager spennende lyder samtidig som det la?ter bra; som er uforutsigbart, samtidig som det reagerer pa? forsta?elige og delvis kontrollerbare ma?ter; og sist men ikke minst, som er selvforklarende. Prototypeappen er programmert i PureData og brukergrensesnittet er laget i MobMuPlat. Begge disse programmene har en del begrensninger som har fa?tt konsekvenser for FLOOT, og noen av disse har jeg ikke klart a? finne en tilfredsstillende l?sning pa?. I l?pet av denne oppgaven vil jeg derfor beskrive ba?de hva jeg har gjort, hva jeg ikke har fa?tt til, og hva som eventuelt gjensta?r a? gj?re.

??

?Utforming og interaktivitet

Ettersom koden f?rst og fremst kun er en ma?te a? realisere ideen pa? vil jeg presentere brukergrensesnittet og selve instrumentet f?rst. Modellen over brukes i Jensenius (2007) for a? illustrere kjeden fra ut?ver til lyd i et akustisk instrument, men vil her fungere som et utgangspunkt for min beskrivelse av FLOOT. Lydproduksjonen i instrumentet besta?r i to enkle stadier som reflekteres i skjermbildene under; lydopptak og avspilling, og det er grafene som utgj?r kjernen i begge funksjonene.

??

Lydopptaket utgj?r basisen for lydproduksjonen, og appen starter derfor i opptaksmodus. Her har man tilgang til tre funksjoner illustrert ved hver sin knapp; opptak av sample (runding), avspilling (trekant) og angre (sirkel-pil). I tillegg er man n?dt til a? dra fingeren over grafen for a? markere utvalget av samplet som skal brukes. I den endelige appen skal dette illustreres tydeligere ved a? ha synlige start og stop-mark?rer i grafen, i tillegg til at utvalget automatisk skal settes til hele opptaket etter endt opptak. Dette har jeg ikke klart a? finne en l?sning pa? i MobMuPlat. I opptaksmodus har man f?lgende typer interaksjon.

Ut?ver-handling:

Feedback fra kontroller:

Feedback i form av lyd:

Som illustrert med pilene pa? h?yre side er tanken at man skal kunne ‘dra’ hele brukergrensesnittet ned eller opp for a? fa? tilgang til henholdsvis avspillings- og opptaksmodus, noe som heller ikke lar seg gj?re i MobMuPlat. Tanken er at den samme lysebla? ‘skjermen’ skal inneholde ba?de lydopptaket og det jeg kaller ‘kontrollgrafen’, med den ene i forgrunnen avhengig av hvilket modus man befinner seg i. Istedet ma? man na? ‘dra’ sidelengs for a? komme til avspillingsmodus pa? et eget skjermbilde.

??

?Det er i avspillingsmodus de interessante lydskapende prosessene skjer. Som nevnt tidligere baserer FLOOT seg pa? en form for granular syntese, hvor det opprinnelige lydopptaket deles opp i mange bittesma? deler, sa?kalte ‘grains’ eller korn. Grafen i avspillingsmodus vil avgj?re i hvilken rekkef?lge disse kornene avspilles, der posisjon pa? X-aksen vil representere tid og posisjon pa? Y-aksen avgj?r hvilket korn som skal spilles av. Ved oppstart ga?r grafen line?rt fra nederst til venstre til ?verst til h?yre, og ved a? trykke pa? ‘one-shot’ knappen ?verst til h?yre vil man h?re utvalget avspilt normalt, og ved a? endre pa? grafen vil man kunne ‘stokke om’ pa? rekkef?lgen av kornene og ende opp med helt andre lyder. Ved a? trykke pa? den graf-knappen (nummer to fra venstre) vil man komme til skjermbildet nedenfor, hvor man kan velge mellom fire forha?ndsprogrammerte kontrollgrafer; forlengs, baklengs, fram-og-tilbake eller tilfeldig (Nok en gang er hensikten at dette skal forega? pa? ett og samme skjermbilde, noe jeg ikke fant en l?sning pa? i MobMuPlat. Jeg ser ogsa? na? alt for sent at jeg her har brukt en tidligere versjon av appen i bakgrunnen). Det morsomste er likevel a? tegne inn en kontrollgraf manuelt med fingeren.

??Den tredje knappen, illustrert med et avspillingssymbol, aktiverer hovedfunksjonen til instrumentet, nemlig ‘bla?se’funksjonen. Ved a? aktivere denne vil applikasjonen begynne a? tolke signalet fra mikrofonen som et kontrollsignal, og kontrollgrafen vil leses av i loop, i et tempo som avhenger av hvor hardt du bla?ser i mikrofonen. Den siste knappen har jeg kalt hold, og vil bli tilgjengelig na?r du aktiverer bla?sefunksjonen. Denne knappen fungerer ved a? innf?re en ‘treghet’ eller ‘friksjon’ i avspillingen. I stedet for at hastigheten bestemmes direkte av intensiteten pa? inputen vil bla?semekanismen fungere som et fysisk kraft-system. Dette kan sammenliknes med gasspedalen i en bil; na?r du tra?kker pedalen i ba?nn vil bilen bevege seg fortere og fortere fram til den na?r terminalfarten, og tilsvarende, na?r gassen slippes vil det ta en god stund f?r bilen stanser helt. Pa? samme ma?te vil et konstant bla?setrykk i hold-modus akselerere avspillingen fram til den na?r sin ‘terminalfrekvens’, mens farten i frav?r av bla?sing vil falle sakte mot null.

I tillegg til a? bla?se og endre pa? grafen kan man forme lyden ved hjelp av fire enkle lydeffekter; klang og ekko, samt h?ypass- og lavpassfilter. Disse fa?r man tilgang til ved a? ‘tilte’ telefonen, og ved implementeringen av illustrerer en problemstilling jeg har nevnt tidligere, nemlig at instrumentdesign er n?dt til a? forholde seg til va?re iboende forventninger anga?ende lydproduserende handling. Hans T. Zeiner-Henriksen viser i sin doktoravhandling hvordan lyttere kan sies a? forbinde h?yfrekvente og lavfrekvente lyder med henholdsvis oppadga?ende og nedadga?ende bevegelser (2010). Dette merket jeg tydelig validiteten av da jeg i en tidligere versjon av appen ved en feiltakelse mappet ‘nedadga?ende’ tilting av telefonen til et h?ypassfilter – en oppadga?ende bevegelse i det resulterende frekvensspekteret. Dette opplevdes av ba?de meg selv og de som testet applikasjonen som helt ‘feil’ og illustrerer en indirekte effekt av va?r tidligere nevnte ?ecological knowledge of action-sound couplings? (Jensenius 2007: 32).

I avspillingsmodus har man f?lgende interaksjonsmuligheter:

?Ut?ver-handling:

Feedback fra kontroller:

Feeback i form av lyd:

Programmering

I det f?lgende vil jeg ga? n?rmere inn pa? programmeringen som ligger bak applikasjonen. Ogsa? her vil jeg bruke modellen fra tidligere som utgangspunkt for gjennomgangen, og pa?peke hva som utgj?r ‘mappingen’ mellom handling og kontrollsignal, kontrollsignal og lydproduksjon, samt de ulike feedbacktypene. Gjennomgangen vil besta? i skjermbilder av koden i PureData, samt korte kommentarer. Jeg vil pa?peke at jeg har tenkt ut og laget all koden fra bunn av, kun med utgangspunkt i generelle beskrivelser av hvordan de ulike objektene fungerer. I noen enkelte tilfeller som vil understrekes har jeg ogsa? blitt inspirert av bestemte metoder for a? l?se problemer. Med unntak av reverb-modulen er ingenting kopiert fra andre steder. Dette har gjort hele prosessen sv?rt omstendelig, og enkelte l?sninger kan nok kritiseres for a? v?re for kompliserte, men jeg har til gjengjeld l?rt enormt mye mer enn jeg ville gjort ved a? kopiere andres l?sninger. Under har jeg delt opp koden i opptaksmekanisme, lydproduksjon og feedback/brukergrensesnitt.

Opptaksmekanisme

Hovedopptak

??

Bufferopptak/angrefunksjon

??? ?

Avspillingsmekanismer/lydproduserende kode

Oversikt

?? ?

Her genereres en sa?kalt hanningkurve, som jeg bruker til a? unnga? klikkelyder og resulterende st?y i avspillingen. Dette er en vanlig metode innenfor granular syntese, og min implementasjon er inspirert av Johannes Kreidler (2009).

Bla?semekanismen

??

?Dette er den viktigste delen av koden, og ogsa? den som har tatt desidert lengst tid. F?r jeg kom fram til den na?v?rende l?sningen med inndeling og avspilling av korn, altsa? mindre grupper av samples, brukte jeg kontrollgrafen til a? lese direkte fra samplefila. Dette gikk OK dersom fila ble lest i normalt tempo forlengs eller baklengs, men ble st?yende ved bra? eller trege endringer, og ubrukelig dersom man fors?kte a? fa? en konstant tone ved a? tegne en horisontal rett kontrollgraf. L?sningen ble altsa? a? dele opp avlesningen i grupper av samples, slik at e?n verdi motatt fra kontrollgrafen utl?ser en avlesning av tilsvarende samt en viss mengde etterf?lgende samples fra lydfila. Som man ser i koden brukes hastighetsvariabelen fra innbla?singen til a? styre avlesningen av kontrollgrafen som feeder inn i to parallelle sampholdobjekter. Disse objektene sender ut den aktuelle verdien annenhver gang, med mellomrom avgjort av et phasorobjekt, som ogsa? styres av hastighetsvariabelen. I stedet for at kontrollgrafen leser av sampelet direkte vil det nevnte phasorobjekte starte avlesningen ved den aktuelle verdien angitt av kontrollgrafen, og sa? fortsette et visst stykke i et tempo avgjort av hastighetsvariabelen, f?r det begynner pa? nytt fra den neste verdien som mottas fra kontrollgrafen. Direkte vil dette medf?re i mye klikk og st?y, men ettersom disse hoppene alltid skjer i motsatt fase kan man modulere amplituden ved hjelp av f?rnevnte hanningkurve, og pa? den ma?ten vil summen av de to kjedene bli et jevnt signal uten klikkelyder.

OneShot

??

?Dette er en enklere utgave av den forrige patchen, ettersom tempoet er fast avhengig av lengden pa? utvalget, og avspillingen trigget av et tastetrykk.

Forhondslytting pa? sampleutvalg

???

?Dette er den enkleste avspillingsmekanismen, og er en direkte avspilling av det markerte omra?det i opptaket.

Lydeffekter

??

?Dette er koden til lydeffektene som styres ved a? tilte telefonen i bla?semodus. Reverbpatchen er kopiert fra Scott Nordlund (2011), med enkelte modifikasjoner for a? tilpasse den til Pd-0.45-4-vanillaForMobMuPlat. Dette gjelder f?rst og fremst erstatting av avanserte filtere og enkelte sin~ objekter. Denne har ogsa? stereo output, noe jeg har valgt a? benytte meg av i tilfelle man bruker appen med hodetelefoner.

?Feedback/brukergrensesnitt

Her har jeg ogsa? valgt a? dele inn koden i opptak og avspilling. Alle knappene ligger for enkelhets skyld under avspilling

Opptak

??

I MobMuPlat mottas informasjonen fra Meter-patchene av et LCD-objekt som ligger bak en maskering med et mikrofon- og ‘bla?seformet’ hull, slik at ikonet endrer farge i takt med volumet pa? input.

Avspilling

??

Jeg har fors?kt a? lage et UZI-objekt tilsvarende det som finnes i Pd-Extended, men har kun klart a? lage et som er begrenset til samplehastigheten.

????

??Alle knappene er tegnet direkte inn pa? bakgrunnen i MobMuPlat. Over hver knapp har jeg lagt inn et bildepanel, og over det har jeg lagt inn usynlige trykkeknapper. Hver gang en knapp trykkes inn vil det lastes inn en hvit og delvis gjennomsiktig .png fil i det respektive panelet, slik at det oppleves som om knappen reagerer pa? ber?ring. Videre har jeg som nevnt valgt a? skyggelegge hold og play-knappene na?r de ikke er i bruk for a? tydeliggj?re hvordan de skal brukes for sluttbrukeren

???

?Brukertester

Ettersom jeg har satt meg fore a? lage et brukervennlig og intuitivt forsta?elig instrument har jeg ogsa? benyttet meg av uformelle brukertester i utviklingen. Testpanelet har besta?tt av min ti a?r gamle bror og en 23 a?r gammel person uten musikalsk bakgrunn, og observasjon og deres kommentarer kom jeg fram til f?lgende liste med problemer:

Noen av disse problemene mener jeg a? ha l?st, noen lar seg som nevnt ikke l?se med de verkt?yene jeg har tilgjengelig, og andre igjen vil jeg foresla? mulige l?sninger pa? helt til slutt.

Iverksatte l?sninger

Et av problemene som ble nevnt var forvirrende ikoner. Det gikk f?rst og fremst pa? at jeg tidligere brukte et Play-ikon for OneShot-funksjonen, mens jeg hadde en typisk av/pa?- knapp for a? aktivere bla?sefunksjonen. I tillegg var hold-knappen alltid gr?nn, uten at den hadde noen funksjon na?r bla?sefunksjonen var av. Alt dette ble oppfattet som forvirrende av brukerne, som brukte sv?rt lang tid f?r de i det hele tatt pr?vde a? trykke pa? On/Off- knappen. Forha?pentligvis vil play-knappen v?re mer fristende, i tillegg til at den visuelle feedbacken ved a? skyggelegge hold-knappen vil tydeliggj?re na?r den har en funksjon. A? flytte play fra oneshot til av/pa? tydeliggj?r ogsa? hvilken av disse som ansees som viktigst. I tillegg til dette har jeg en rekke andre ideer som ga?r pa? feedback som vil gj?re alle slike funksjoner langt mer forsta?elige, noe jeg kommer tilbake til snart.

Framtidige endringer

Mesteparten av problemene f?ler jeg likevel at best lar seg l?se med mekanismer jeg ikke har klart a? realisere innenfor MobMuPlat sine rammer. Disse ga?r hovedsaklig pa? visuell feedback og tydeliggj?ring av hva som til enhver tid skjer. Den viktigste l?sningen i sa? ma?te vil v?re playhead og markering av avspilling. Slik jeg har gjort det na? har jeg brukt sliders som synes sa?vidt over og under og pa? siden av grafene, ettersom disse ble altfor dominerende og stygge a? ha foran. For det f?rste ville jeg ha lagt til smale og vertikale spillehoder som visualiserer avspillingen av utvalget, ba?de i opptak og avspillingsmodus. Dernest ville jeg ha gjort slik at det som syntes i bakgrunnen av kontrollgrafen var en innzoomet versjon av markeringen, slik at spillehodet kunne bevege seg over hele grafen. Det aller viktigste ville likevel v?re a? snu kontrollgrafen 90 grader, slik at en horisontal verdi pa? kontrollgrafen faktisk tilsvarte en horisontal posisjon i b?lgeformen. Dette kunne markeres ved a? ha en prikk eller liknende mark?r som beveget seg vertikalt igjennom kontrollgrafen og dermed fulgte avspillingshodets bevegelser i b?lgeformen. Dette har jeg illustrert under.

?? ?

?Videre ville jeg ha implementert flyttbare start og slutt-mark?rer i opptaksvinduet. Disse skulle automatisk bli satt til a? omfatte hele sampelet ved nytt opptak, noe som ikke er mulig i denne versjonen av mobmuplat.

??

Effektbruken har jeg ikke funnet en tilfredsstillende l?sning pa?, men jeg kan tenke meg at man kan implementere en slags steg-for-steg gjennomgang slik man ofte ser i internettspill ved f?rste gangs bruk av applikasjonen. Her kunne man blitt guidet gjennom prosessen, ? ?og ting som at telefonen ma? beveges for a? skru av og pa? effekter kunne blitt pa?pekt. Andre ting som krever finpuss er feedbackkontroll, ettersom det fortsatt hender at volumet fra h?yttalern tolkes som bla?sing i mikrofonen, spesielt ved bruk av hold-knappen og effekter. I tillegg ma? designet finpusses og feedbacken gj?res enda penere og mer inspirerende.

Til slutt vil jeg nevne muligheten for a? ha to ulike versjoner av appen, hvor man eksempelvis kan kreve ekstra penger for a? gi brukeren tilgang til konfigurasjon av effekter, minnefunksjon og presets, kvantifiserbar hastighet som kan brukes til a? spille toner, eventuell midi implementering m.m.

Patcher