Xbox-kontroller møter seljefløyte: XSel

En Xbox 360-kontroller forbindes vanligvis ikke med musikk, men i dette prosjektet har den blitt omgjort fra å være en vanlig spillkontroller, til å kunne spille folketoner. Kontrolleren styrer en synth som baserer seg på oppførselen til en seljefløyte. En slik fløyte kan spille en rekke naturtoner ved å blåse hardere og hardere, men også spille en ny rekke naturtoner som ligger en kvart lavere, hvis man holder foran hullet i enden til fløyten. Denne pd-patchen transformerer en vanlig spillkontroller til å oppføre seg på samme måte.

Hovedvinduet til XSel-patchen. Her kan man koble pd opp mot kontrolleren, lese data fra den, og navigere seg videre til de andre sub-patchene hvor raw-dataen blir omgjort til lyd.

Mitt fokus i dette prosjektet har vært rundt hvordan man kan mappe data som en kontroller sender, til å styre ulike funksjoner som gjør kontrolleren om til et spillbart instrument.

Xbox 360-kontrolleren sender data til maskinen din, som pd må finne og lese. For Windows brukes [hidin]-objektet, mens for Mac og Linux brukes [hid]. Skal man teste denne patchen på Mac er det derfor viktig å endre navnet til dette objektet til [hid] for at det skal kunne fungere. Etter at pd har fått koblet seg opp mot kontrolleren, mottar [hidin] data som må settes inn i et system. Ved å bruke [route], kan man lage en rekke outlets som organiserer de ulike datastrømmene som vist på dette bildet. Her sendes de ulike kanalene til [send]-objekter, slik at de lett kan hentes igjen med [recieve]-objekter fra hvor som helst i patchen.

Routing

Siden jeg synes det var litt lite intuitivt å lese data fra route-panelet, valgte å samle denne dataen og sette de opp i en lignende visuell framstilling som kontrolleren har. På denne måten er det lett å lese hvilken data som sendes  når man trykker på kontrolleren.

 

 

 

Fra to akser til fire retninger

Joystickens data og sektorerStore deler av arbeidet har gått med på å finne ut hvordan instrumentet skulle fungere i praksis. Løsningen jeg endte opp med er at hver av joystickene kan spille fire toner hver, ved å dytte de i retningene OPP, HØYRE, NED og VENSTRE. Dette gjør det mulig å spille 8 toner. I tillegg kan man trykke inn Right Bumper (RB) for å senke alle tonene en kvart lavere, slik at vi totalt har muligheten for å spille 16 toner. Data inn fra hver av joystickene kom i form av to akser; 1:OPP/NED, 2:VENSTRE/HØYRE. Hver av disse sender ut heltall fra 0 til 65535. Siden jeg ville bruke fire retninger pluss ha en dødsone i midten, valgte jeg å dele hver av aksene inn i tre like store deler. For å gjøre dette måtte jeg først skalere ned 65535 ned til 29999. Siden 29999 / 65535 = 0,457769, multipliserte jeg datastrømmen med 0,457769 for å få til dette. Deretter delte jeg tallet på 10000 for å gjøre det om til et heltall med desimaler. Siden jeg kun ville ha et heltall, så brukte jeg [int] for å kutte vekk desimalene uten å forandre heltallet, siden [int] kun behandler heltall. For ordens skyld gjorde jeg at tallene starter på 1 og ikke 0, ved å plusse tallet med 1. Deretter satt jeg inn et [change]-objekt som forhindrer at tallet oppdaterer seg hele tiden, siden joysticken er svært sensitiv og registrer bevegelse bare man tar i den. Videre brukte jeg [select] for å trigge av- og på-beskjeder til toggle-boksene. Hvis for eksempel [select] registrer tallet 1, vil den sende bang til to message-bokser. Den ene boksen har tallet 1 og går til toggle nummer 1. Den andre boksen sender tallet 0 til boks nummer 2 og 3. Dette gjentas for tallene 2 og 3, slik at når [select] registrerer et tall, vil toggle-boksen til dette tallet skrus på og de andre av. Disse tre toggle-boksene blir så sendt videre for å kombineres med toggle-boksene til aksen OPP/NED.

Videre går disse inn i et system som gjør de ulike kombinasjonene om til et tall som indikerer hvilken retning joysticken peker. Dette er her løst ved å bruke [&&]-operatoren, som sjekker om høyre og venstre inlet er “IKKE NULL” (non-zero). Hvis begge tallene er noe annet enn null sender den beskjeden “1” som vi kan lese av i number-boksen under. Jeg fikk en del problemer når jeg kun brukte ett [&&]-objekt til å sjekke alle mulighetene til hver retning, fordi den sjekker kun fra venstre til høyre. Problemet var at den ikke registrerte alle bevegelsene, avhengig av hvilken vei som ble bevegd først. Derfor brukte jeg to objekter slik at den sjekker kombinasjonen til venstre og høyre inlet, pluss høyre og venstre inlet. Etter jeg hadde lagt til alle sektorene og kombinert høyre og venstre joystick, får vi ut tallene 0-8 ut ifra hvilken retning man peker joystickene. Dette så til slutt slik ut:

Synthen

For å i det hele tatt få lyd fra instrumentet trenger det en lydkilde. Dataen som ble prosessert i patchen over, blir sendt videre til synth-patchen, som i grunn er to separate synther som hver kan produsere 8 partialtoner (overtoner). Disse to synthene er like i struktur, men den ene spiller en kvart lavere enn den andre, slik at hver retning på joysticken kan alterneres mellom to toner ved hjelp av RB. Hver partialtone mottar individuell data om hvilken pitch og styrke de skal spille, slik at det er mulig å gjøre fininnstillinger på klangfargen hvis man ønsker det. 

Endre grunntonen

Som standard starter synthen å spille på grunntonen F2. Hvis man ønsker å endre på dette, kan man bruke D-pad'en for å velge andre grunntoner. Begrensningen her er at D-pad kun sender ut data 0 til 8, som vil si at man kun kan velge mellom 8 ulike grunntoner. Derfor kan man kun velge mellom de 8 hvite tangentene fra F2 opp til F3. 

Hvilken oktav man spiller i har også mye å si for både klangfarge og bruksområder for instrumentet. Ved å trykke X, Y eller B, kan man sette grunntonen til å være F1, F2 eller F3.

Her kan man endre grunntonen til instrumentet

Romklang

Ved å bruke [freeverb]-objektet, har man muligheten til å tilføre romklang på instrumentet. Siden dette ikke alltid er skelig har jeg gjort det mulig å skru av klangen ved å trykke knappen A. I patchen har man mulighet til å endre på parametrene til klangen, slik som hvor stor rommet er, demping av frekvenser eller hvor mye klang som skal være på signalet.

 

Master out

Helt til slutt samles all lyden i en felles sub-patch hvor jeg har satt inn en av- og på-funksjon. Denne gjør at man kan skru lyden på med Start-knappen og av med Back-knappen. 

 

Oppsummering

Dette instrumentet kan spille en rekke forskjellige toner ved hjelp av joystickene på kontrolleren. Den har muligheten til å alternere tonen ned en kvart ved å trykke RB. I tilleg har den muligheten til å endre grunntonen med D-pad og X, Y, B. Klangen kan skrues av og på med A. Hvis man ønsker å stoppe en tone å spille kan man trykke LB. For å skru mastervolumet av eller på kan man bruke Start og Back. 

Skjermbilder og patch

Flere høyoppløselige skjermbilder finnes her.

Pd-patchen kan lastes ned her.

Av Sondre F. Myrhol
Publisert 22. mai 2016 23:03 - Sist endret 22. mai 2016 23:52