Coder Social home page Coder Social logo

pickup's Introduction

Pickup

This is pickup (in go), a web frontend for Music Player Daemon by Andy O'Neill [email protected].

Pickup is my white whale... I've been playing with the idea since 2007. I have a large music collection, and my navigation of choice is by album, with easy search available. The "albums" interface in Google Play Music (web) is pretty close, but the google play uploader sucks and misses half of my songs.

Status

It works, just about. You can add albums and tracks to the playlist, control volume, skip tracks, start/stop playback. You can view the playlist. It runs on the Raspberry Pi with room to run mpd as well. Because of the client-side architecture it is very fast. I hope to start iterating on the look-and-feel a bit soon now that it is functional.

Getting Started In Ubuntu

apt-get install golang-go
mkdir $HOME/go
export GOPATH=$HOME/go
go get github.com/werkshy/pickup

cd $HOME/go/src/github.com/werkshy/pickup
go build
./pickup --help
./pickup

Getting Started Cross-Compiling for Raspberry Pi

In ubuntu, you need to build go yourself to cross-compile. Using these instructions download the source, run ./all.bash to get your native toolchain.

Next run this to build the ARM toolchain for the pi:

GOOS=linux GOARCH=arm GOARM=5 ./all.bash

Now you can cross compile pickup for the pi

cd ~/go/src/github.com/werkshy/pickup
GOOS=linux GOARCH=arm GOARM=5 go build

Now copy the whole pickup directory to your pi and run

./pickup

Background

I've written functional prototypes of this in C++, Python, C++ again (I was trying to run it on an NSLU2 embedded Linux machine with 32MB RAM) and now Go. It started off as a standalone player, then grew an xmms2 backend, and now is going to use mpd for playback, since I already use mpd everywhere and it just works. I'm writing it now in Go because I want to learn Go and I want to have this system. This is my first real project in go: any code review, criticism or contributions would be much appreciated.

Design Requirements

  • Run on embedded hardware. NSLU2 would be nice, Raspberry Pi would be fine.
  • Display results quickly even when the music is stored on a slow-ish network drive (i.e. some caching of available music).
  • Include more metadata than pure MPD, e.g. related artists, reviews etc. Can be loaded on the fly or stored locally.
  • Show random albums to play. Shuffle-by-album.
  • Assume /some/netsted/path/Artist/Album/Track.extension file format
  • Must have: play now / add to main playlist
  • Must have: play internet streams (e.g. DI Radio)
  • Must have: responsive frontend, single-page-app feel.

Design Approach

  • The Go implementation is a simple backend serving JSON to a javascript frontend, (single-page app in Backbone.js.)
  • The frontend loads the entire music collection up front. This takes less than a second and makes navigating around the collection extremely fast.

Roadmap

See Pickup on Trello

Screenshot

Screenshot

pickup's People

Contributors

werkshy avatar hoffoo avatar taylor avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.