Turbo Wookie is a whimsically named product. More importantly, it's a collaborative music jukebox which streams music to multiple clients concurrently.
If that doesn't really explain anything, in less technical terms, Turbo Wookie is a collaborative jukebox; a group of people (probably friends?) can start up a Turbo Wookie instance, share the address amongst themselves, and build a playlist that they'll be able to listen to at the same time.
Think of it like an internet radio station, but the only music played is yours, and the DJ is everyone you let access your Turbo Wookie instance.
Turbo Wookie started as a group final project for a Software Design and Development course. We liked it more than the other ideas proposed to the group.
Turbo Wookie has four main components, in three parts:
- A Music Stream. That's manipulable.
- A Music Library.
- A Web Server that serves clients and manipulates the stream.
- A Web-based Frontend. Because who wants to download another application?
The three parts are:
- MPD (Music Player Daemon). It acts as both our stream and library.
- Our backend server. It's written in Go, and is where we actually tell MPD to do things.
- Our frontend. It's written in Dart and is where the stream is played, and where users ask for the stream to be manipulated. It also shows the library. We think it's kinda pretty.
Thus far, running Turbo Wookie been tested on Linux (Ubuntu and Arch) and Windows. Presumably it'll run on OS X, we just don't have any team members running OS X.
If you want to follow our incredibly snarky manual, you can do that.
If you'd rather just have the gist, and figure it out yourself:
- Install MPD, Go, and Dart (or at least
dart2js
andpub
). Make sure MPD's executable is in your path. - Build the
frontend/turbo_wookie/
dart project (usingpub get && pub update && pub build
), which will compile our dart code to javascript. - Copy
backend/mpd/mpd.conf.example
tobackend/mpd/mpd.conf
, and modify it so it uses your directories, instead of mine. - Copy
backend/config.example.yaml
tobackend/config.yaml
, and adjust as needed. If all you change inmpd.conf
is the directories, you only need to changeturbo_wookie_directory
andmpd_subdirectory
(and probably not evenmpd_subdirectory
). - Open the
backend
directory, and runserver.go
(if you don't want to build it,go run server.go
, if you want to build itgo build server.go && ./server
). You might need to grab some dependencies.
Eventually (hopefully) we'll put together an executable, complete with the frontend, so you don't have to manually build all that stuff.
Turbo Wookie assumes you're running it in a directory with a config.yaml
file with the required keys for Turbo Wookie. If you aren't, you can specify the location of a config file using the -config
flag (like this: go run server.go -config /path/to/config.yaml
).
You need the same things installed as before, in addition to Dartium, a Chromium build that can run unconverted Dart code, if you want to play with the frontend.
The only difference between the above steps for getting Turbo Wookie running is that when you run the server, you might want to use one of our three flags:
-dart
(bool) will serve up the unconverted dart code (thefrontend/turbo_wookie/web
directory instead of thefrontend/turbo_wookie/build
directory).-nompd
(bool) will not start MPD with the server, it'll assume you've started MPD already. If you don't start MPD and use this flag, bad things will happen (as in, the server won't start because it won't be able to talk to MPD).-config
(string) will specify a specific config file. If you don't include the config flag, it will assume there's a config file in your current working directory.
Using the flags is easy, even if you're using go run
, just append them to the end of the command (as in go run server.go -dart -config /path/to/config.yaml -nompd
).
Everything is fairly well documented.
If you really want to, you can use Turbo Wookie as an MPD controller, and output
to your speakers instead of to the web (or do both). In this case, just adjust
your backend/mpd/mpd.conf
. Uncomment one of the other audio_output
blocks
(for most Linux users, the alsa
output should be fine; for Windows users , the
winmm
block should do; OS X users, I have no idea...)