Visar inlägg med etikett Val. Visa alla inlägg
Visar inlägg med etikett Val. Visa alla inlägg

11 mars 2008

Val av programmeringsspråk för Wiinamp

Att fortsätta använda C# i utvecklingen av pluginen Wiinamp kändes optimalt men är tyvärr inte möjligt. Det går att göra men nackdelerna överväger fördelarna och att använda C eller C++ är att föredra.

Plugins till Winamp fungerar på de sättet att de skrivs som unmanaged C-DLL:er som sedan laddas av programmet. Polis Pilavas är en utvecklare som portat det SDK för C++, som Winamp erbjuder på sin webbplats, till C#. På sin webbplats för projektet förklarar han att plugin till Winamps kan skrivas i C# men att nackdelarna överväger fördelarna:

"No it doesn't have plugin functionality, because winamp load's unmanaged C dlls as plugins, so if you want to create a plugin you'd be better of doing it in C or C++.You can however create a separate program that monitors for when another song starts playing, and does 'some things'. As far as I can tell the only way to have managed code running as a winamp plugin is to have a unmanaged (C or C++) dll, that uses COM via COM/Interop to call a procedure in a managed dll, but even then you would have to find a way to read winamp's memory in a managed process. So the cons definitely outweigh the pros for writing a managed winamp plugin."

Dessa unmanaged C-DLL:er kan skrivas i såväl C som C++. Eftersom Wiinamp med största sannolikhet kommer bestå av kort och okomplicerad kod spelar valet ingen större roll. Alexander och Aram som jobbar med Wiinamp har grundläggande respektive goda kunskaper inom C respektive C++ och känner att lära sig respektive utveckla sina kunskaper i C++ är intressantare än att göra detsamma i C.

Designidén bakom Wiinamp är att låta WiiMove (arbetsnamnet för applikationen för inspelning och identifiering) skicka ut namnet på den identifierande gesten i form av en textsträng till Wiinamp via en named pipe (detta alternativ kan ändras men verkar attraktivast hittills). Pluginen utvecklas att lyssna efter textsträngar och skickar sedan olika kommandon till Winamp beroende på vilken textsträng den läser.


Val av mediaspelare

Vi har sedan början av arbetet varit överens om att vi vill tillämpa vårt verktyg genom att styra en medispelare med olika gester. Valet föll på en välbekannt och populär mediaspelare som idag används av drygt 57 miljoner människor, nämligen Winamp.


Vi valde Winamp av följande orsaker:

  • Populäritet: 57 miljoner användare talar för sig själv.
  • Tacksamt att modifiera: På Winamps officiella webbplatsfinns omfattande vägledning för utveckling tillgänglig. Ett stort utvecklingsforum erbjuds i kombination med ett SDK (Software Development Kit) och tusentals nerladdningsklara plugins.

Vårt minimimål är nu att med enkla gester kontrollera funktioner som play, paus, next, previous, volume up, volume down med flera i denna mediaspelare.


Namnet på pluginen blir såklart Wiinamp.

17 februari 2008

Utvärdering av metod för inspelning/identifiering

Hidden Markov Models:
Statistisk model som används till system som är modellerade som en markov-process med okända parametrar. Den är populär inom många former av igenkänning såsom gestigenkänning och röstigenkänning [1]. Inom området gestigenkänning där man utnyttjar accelrometrarna används modellen bl.a. till projektet Wiigee som är öppen källkodsbaserat. Hur man använder den och hur finns det även mycket information om och då den innefattar markov-kedjor är den inte heller helt obekant för gruppen då detta har berörts ett par kurser.

Neurala nätverk:
Samlingsnamn på ett antal algoritmer som påminner om hur nervceller och hjärnan fungerar vilket skiljer dessa mot andra mer "datavetenskapliga" algoritmer. Används bl.a. till mönsterigenkänning och signalbehandling [2]. Vi har inte lyckats hitta något Wiiremote-projekt som använder neurala nätverk till gestigenkänningen så att använda detta vore att göra det på ett annorlunda sätt. Med stor sannolikhet skulle detta ge bra resultat då det har gjorts gestigenkännings-experiment m.h.a. neurala nätverk vilka gett goda resultat [3]. Dock är neurala nätverk beräkningskrävande vilket kommer att begränsa applikationerna som skall använda sig av vårat bibliotek.

Beslut:
Både neurala nätverk och Hidden markov model används redan för gestidentifiering och bägge är därför lämpade till uppgiften. Men då vårt mål är att bygga ett fungerande och snabbt bibliotek under en begränsad tid vill vi använda något som redan är testat och fungerar effektivt tillsammans med Wiiremot:en så därför har vi valt att använda Hidden Markov model. Dessutom är den väldokumenterad och vi är bekanta med lite av matematiken bakom Hidden Markov model så att tillämpa den kommer att gå snabbt.

[1] Hidden Markov Model
[2] Neurala Nätverk
[3] Experimentell tillämpning av neurala nätverk för gestigenkänning

10 februari 2008

Utvärdering och val av bibliotek

Egenskaper

WiimoteLib

WiiremoteJ

Öppen källkod



Dokumentation



Aktivt forum



Plattformsoberoende



Ljud-support



Kräver externa bibliotek



Kunskap i språket (% i gruppen)

40%

100%

Diskussion av matrisdata: 

Då WiiremoteJ inte är öppen källkod blir man beroende av extern hjälp vid eventuella buggar. Båda är bra dokumenterade och har aktiva forum. WiiremoteJ är kodat i Java vilket gör det plattformsoberoende medan WiimoteLib är kodat i C# och stöds endast (väl) på Windows-plattformen. Vi ser dock ej detta som en större nackdel och väger inte detta argument så tungt i utvärderingen eftersom majoriteten av dagens datoranvändare använder Windows. Ljud-support är inte kritisk i dagsläget och vid behov kommer vi att själva implementera stöd för det i WiimoteLib. Vi ser beroendet av externa bibliotek som befinner sig i ett uvecklingsstadie som en nackdel då risken för buggar är större.Även fast en mindre del av gruppen är familjära med C# än Java så ser vi inte det som nån större tröskel eftersom dessa språk är väldigt lika.


Slutsats: 

WiimoteLib är öppen källkod och är inte beroende av något externt bibliotek vilket gör att risken för elaka buggar är liten. Det är även ett väldokumenterat bibliotek med bl.a. exempel-applikationer och ett aktivt forum.

Även om inte alla i gruppen är bekanta med C# ser vi det inte som en nackdel. Snarare som en fördel då vi har ett utmärkt tillfälle att få kunskaper i ett nytt språk som används mycket ute i industrin. Därför har vi valt att använda WiimoteLib och C#.