ECE497 Project Music Server

Team members: Eric Ames, David Cooper

Executive Summary
This project focused on creating a music server hosted on the BeagleBone. The server will contain a number of MP3 files which will be playable from the Beagle via either direct access or network accessed from another computer. Currently we also plan to include an option to stream Pandora, rate songs, skip songs, and a graphical browser interface.

We realize it's an odd choice to have a project that focuses solely on software, rather than a combination of that and hardware. But when approaching the project, we wanted to build something that we would actually use afterwards, and not just relegate to history. I believe we succeeded.

WORKING

Currently the web browser works, and allows playback of songs through the beagle. It is also possible to request the current playlist. A Playlist is automatically generated upon server creation, and automatically seeks out mounted memory under /mnt/server_media.

TODO

1) Allow playable HD video? To be seen if the Beagle supports this. NOPE.

2) Allow custom playlist creation by selecting specific songs in the browser GUI.DONE

3) Allow uploading/downloading of songs from the mounted flash drive. DONE

4) Enable pandora streaming by using pianobar, or some similar radio-stream service. Unable to get working, TLS error on the creator's side

Opt1) Create a visually attractive GUI. Working on it...

Opt2) Add client-side streaming of music as an option. Probably not enough time, but will try.

Packaging
Just about everything needed is in the repo, including the needed node modules. You will need to install NPM and NODEJS on your own. May also need to install module dependencies.

Installation Instructions
Give step by step instructions on how to install your project.

1) Go to https://github.com/Guiltygate/beaglebone-classwork and clone the umbreon folder somewhere on your laptop. Note: Good luck getting this to run on Windows.

2) Install nodejs. Nodejs 0.8.xx and higher should be fine. You may also need to install NPM in order to find the dependencies for the different node modules included in the repo.

User Instructions
See the README for further detail, but here's the basics.

Run ./startServer.sh if you wish to automatically mount your current usb drive. Server will start at 192.168.7.2:0121. If you'd rather just start the server without auto-mounting, run node umbreonServer.js To play the current playlist (initializes to all .mp3 files in the top directory of your flash drive), hit the big arrow button. To view the current playlist/remove songs from it, hit the '-' button on the right. To view the entire directory of mp3 files and possible add them to the playlist, hit the '+' button on the left.

To swap out flash drives, physically switch them and hit the 'Load Media' button below. To stop the current playlist from playing, hit the 'Stop Playlist' button.

To download the current track, hit the 'Download' button at the bottom of the page. To upload, choose a file at the bottom of the webpage and hit the 'Submit' button.

Highlights
Here is where you brag about what your project can do.

Include a YouTube demo.

I currently have no way to record video at a decent quality, but I'll see what I can do.

Theory of Operation
Using express framework in NodeJS. Enables user to upload songs for playing, download the currently playing song, view playlist, edit playlist, add songs from the directory, change media by swapping out usb drives, etc.

Everything was planned for maximum user convenience, as I plan on using this in my dorm room once I obtain a wireless router for the bone.

Work Breakdown
Server Core: Done

Server Features: 85% complete.
 * Playlist - done
 * Playlist viewing - done
 * Playlist editing - done
 * Radio-Stream - TBF
 * GUI - done
 * Enhanced GUI - TBF
 * Song uploads - done
 * Song downloads - done
 * Tracklist - done
 * Effortless media swapping - done

Network access: Done

Interface: 90% complete

Optional - Client streaming: TBF

Future Work
Add wireless router to the bone for easier access. Client-side streaming would be nice, but there's already so many available online, kind of pointless.

Conclusions
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.