Gå til innhold

Anbefalte innlegg

SoundWeb

 

SoundWeb skal gi deg de samme mulighetene du har ved å bruke tjenester som Spotify, Wimp eller Beat.no. Du skal få muligheten til å streame din egen musikk som du har liggende, enten via et program du kan kjøre på en pc(.NET), en mac eller linux-maskin (java), en androide-enhet (java), eller via en nettleser (silverlight, java og muligens støtte for javascript decoding).

 

Kommentartråd

Alle tanker og meninger rundt prosjektet tas gledelig imot i kommentartråden.

 

Hvorfor

Veldig mange har mye musikk liggende på pcer, mp3-spillere og ikke minst store hauger med cder kjøpt i butikk. Tiden hvor man hadde en discman eller et lydanlegg dedikert til å spille av cder, er forbi. Nå til dags har mobile enheter og streaming av musikk tatt over dagligdags musikkavspilling. Hvis man ikke skal bruke de store streamingtjenestene som Spotify, men heller vil bruke musikk man allerede har kjøpt og betalt for, så må man ta med seg hele filen hvor enn man vil høre på den.

 

Forskjellen på dette systemet og andre programmer som lar deg streame lokal media, er muligheten til å koble flere servere sammen til et nettverk,derav navnet SoundWeb. Norsk lovsier det er lov å kopiere musikken sin til venner og familie. Det er også lov til å kopiere musikk til venner og familie som igjen har blitt kopiert fra venner og familie. Dermed kan en vennegruppe samarbeide om å ha et gigantisk musikkbibliotek, og det beste av alt; Det er helt lovlig.

 

Hva skal lages

- Serverprogramvare for Windows og opensource.

- Klientprogramvare for Windows ogopensource.

- Nettleserklient

 

Hvordan

For å beholde lydkvaliteten, skal det brukes WavPack som lydcodec på serveren og til å streame musikken. FLAC er et godt kjent format som er lossless, men valget falt på WavPack fordi det har implementert noe de kaller "hybride mode".Når hybride mode står på, genereres det ikke bare en fil når man komprimerer musikken, men to. Den ene filen er en mindre men fortsatt høy kvalitets lossy musikkfil, og sammen med den andre filen kan man generere ut musikken i sin originale kvalitet. Det støttes til og med studiokvalitet på musikken.

 

I første omgang må originalfilen være i FLAC-format, men etterhvert vil det bli lagt inn støtte for blant annet mp3 og wav.

 

På det nåværende tidspunkt er dette hvordan jeg ser for meg ulike "moduler" og dataflyt mellom disse på klient og serversiden. Dette er kanskje ikke helt forstålig for hvem som helst, men det gir mening for meg, og jeg skal prøve så godt jeg kan å forklare hvordan alt skal fungere sammen underveis.

 

6813684272_05ce57751a_b.jpg

Server dataflyt.

 

 

 

6813684214_f579d465f7_b.jpg

Klient dataflyt.

Endret av Kamikaze-Kanin
Lenke til kommentar
Videoannonse
Annonse

Da var det på tide med første update her. Er litt som skjer hver dag, men ikke nok til at det er noen vits i å prøve å informere verden om det.

 

Hva som er gjort

 

 

Først og fremst startet jeg å lage en multithreaded server for å ta seg av alle som kobler seg til. Greit nok, det er en relativt enkel sak å lage. Problemet oppstår når man skal grave ut all informasjonen fra musikkfilene, som tittel på sangen, artisten, album og lengden på sangen.

 

Etter ganske mange timer med Google som min beste venn, har jeg klart å komme over biblioteket libTag som er skrevet i C. Men takk og lov at det er noen andre som har laget en wrapper for bruk i .NET-prosjekter!

 

For å lagre all informasjonen som leses fra musikk-filene, så har jeg valgt å bruke en SQLite database. Dette er fordi det er enkelt å distribuere databasen, og den kan enkelt leses av i utallige programmeringsspråk. For å enkelt lage en database å starte med anbefales f.eks SQLite Administrator til resten av verden der ute ;)

6977568353_d6e7065963_b.jpg

 

Litt av den nåværende databasestrukturen, også kan du se at systemet har klart å automatisk fylle inn noen sanger, artister og album fra første og beste CD som lå liggende ^_^

 

Selve prosjektet har fått bygget opp litt flere funksjoner og klasser. Det er laget en statisk klasse som bare skal ta seg av å skrive til en logg-fil. Enkelt og greit å bruke ved exception-handeling!

For å koble hvordan koden er bygget opp hittil i forhold til den planlagte dataflyten lenger oppe, så kan du jo ta en liten titt på det nåværende klassediagrammet.

 

6833385654_1ed79663a2_b.jpg

 

For å forklare litt;

- Hver server inneholder mange Connections som representerer en tilkoblet klient (eller server, men kommer tilbake til det senere i prosjektet).

- Hver Channel er en kobling til en stream på serveren. Hver Channel identifiseres med en ID, og denne brukes når data kommer tilbake til klienten.

- Hvis man skal sende en enkel spørring til serveren trenger man ikke gå den lange veien innom å lage en Channel for å sende og motta data, man sender enkelt og greit bare spørringen og venter på mottaket ved å bruke AsyncCallback.

 

 

 

Hva som skal gjøres

Nå som det er implementert nok funksjonalitet til å legge til mapper med filer, så kan jeg bevege meg videre til at klienten skal kunne sende spørringer til serveren om å få lister over sanger og artister.

 

 

Nå har jeg aldri skrevet noen arbeidslogg for programmering på denne måten, så jeg vet ikke helt hva som er interessant å høre om. Så jeg tar gjerne alle tilbakemeldinger jeg kan få = )

 

Interessant med GitHub kanskje?

 

 

 

 

Kommentarer takk

 

Kommentartråd

Lenke til kommentar
  • 2 uker senere...

Nå er det en liten stund siden siste oppdatering. Det er skjedd litt av hvert siden sist, blant annet har jeg møtt på noen små fartsdumper, hvor den største av dem egentlig har vært bacheloroppgave og det faktumet at jeg satt opp en ny Minecraft (Tekkit) server hjemme... dummeste jeg har gjort på lenge xD

 

Originaltanken var jo å programmere dette asynkront helt fra bunnen av... og siden jeg ikke har prøvd meg på noe sånt før, så tar det kanskje litt lengre tid enn nødvendig :/

 

Sakte men sikkert så trenger jeg å designe et godt brukergrensesnitt, jeg tenker jo å se på alle de andre kjente musikkavspillingstjenestene, men jeg kan jo ikke ha noe som er likt alle andres. Så jeg tar gjerne imot alle forslag til hvordan folk vil ha det. Hva er det f.eks du liker med Spotify som du kunne tenke deg at jeg legger inn?

 

Har ikke så mye tid til å skrive noe her i dag, skole og hyttetur er rett rundt hjørnet ;)

 

Dine forslag til brukergrensesnitt tars i mot i kommentartråden!

 

Gooood heeeelg!!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...