groovebasin/README.md
2014-04-24 09:41:12 -07:00

317 lines
12 KiB
Markdown

# Groove Basin
Music player server with a web-based user interface inspired by Amarok 1.4.
Run it on a server (such as a 512MB
[Raspberry Pi](http://www.raspberrypi.org/)) connected to some speakers
in your home or office. Guests can control the music player by connecting
with a laptop, tablet, or smart phone. Further, you can stream your music
library remotely.
Groove Basin works with your personal music library; not an external music
service. Groove Basin will never support DRM content.
Try out the [live demo](http://demo.groovebasin.com/).
## Features
* Fast, responsive UI. It feels like a desktop app, not a web app.
* Dynamic playlist mode which automatically queues random songs, favoring
songs that have not been queued recently.
* Drag and drop upload. Drag and drop playlist editing. Rich keyboard
shortcuts.
* Lazy multi-core
[EBU R128 loudness scanning](http://tech.ebu.ch/loudness) (tags compatible
with [ReplayGain](http://wiki.hydrogenaudio.org/index.php?title=ReplayGain_1.0_specification))
and automatic switching between track and album mode.
["Loudness Zen"](http://www.youtube.com/watch?v=iuEtQqC-Sqo)
* Streaming support. You can listen to your music library - or share it with
your friends - even when you are not physically near your home speakers.
* MPD protocol support. This means you already have a selection of
[clients](http://mpd.wikia.com/wiki/Clients) which integrate with Groove Basin.
For example [MPDroid](https://github.com/abarisain/dmix).
* [Last.fm](http://www.last.fm/) scrobbling.
* File system monitoring. Add songs anywhere inside your music directory and
they instantly appear in your library in real time.
* Supports GrooveBasin Protocol on the same port as MPD Protocol - use the
`protocolupgrade` command to upgrade.
## Install
1. Install [Node.js](http://nodejs.org) v0.10.x. Note that on Debian and
Ubuntu, sadly the official node package is not sufficient. You will either
have to use [Chris Lea's PPA](https://launchpad.net/~chris-lea/+archive/node.js/)
or compile from source.
2. Install [libgroove](https://github.com/andrewrk/libgroove).
3. Clone the source.
4. `npm run build`
5. `npm start`
## Screenshots
![Search + drag/drop support](http://superjoesoftware.com/temp/groove-basin-0.0.4.png)
![Multi-select and context menu](http://superjoesoftware.com/temp/groove-basin-0.0.4-lib-menu.png)
![Keyboard shortcuts](http://superjoesoftware.com/temp/groove-basin-0.0.4-shortcuts.png)
![Last.fm Scrobbling](http://superjoesoftware.com/temp/groove-basin-0.0.4-lastfm.png)
## Configuration
When Groove Basin starts it will look for `config.js` in the current directory.
If not found it creates one for you with default values.
## Developing
```
$ npm run dev
```
This will install dependencies, build generated files, and then start the
sever. It is up to you to restart it when you modify assets or server files.
### Community
Pull requests, feature requests, and bug reports are welcome! Live discussion
in #libgroove on Freenode.
### Roadmap
1. Tag Editing
2. Music library organization
3. Accoustid Integration
4. Playlists
5. User accounts / permissions rehaul
6. Event history / chat
7. Finalize GrooveBasin protocol spec
## Release Notes
### 1.0.1 (Mar 18 2014)
* Andrew Kelley:
* Fix race condition when removing tracks from playlist. Closes #160
* Default import path includes artist directory.
* Also recognize "TCMP" ID3 tag as compilation album flag
* Fix Last.fm authentication
### 1.0.0 (Mar 15 2014)
* Andrew Kelley:
* Remove dependency on MPD. Groove Basin now works independently of MPD.
It uses [libgroove](https://github.com/andrewrk/libgroove) for audio
playback and streaming support.
* Support MPD protocol on (default) port 6600. Groove Basin now functions as
an MPD server.
* Fix regression for handling unknown artist/album
* Fix playlist to display artist name
* Plug upload security hole
* Groove Basin is no longer written in coco. Hopefully this will enable more
code contributions.
* Simpler config file that can survive new version releases.
* Simpler and more efficient protocol between client and server.
* Pressing prev on first track with repeat all on goes to end
* Automatic loudness detection (ReplayGain) using EBU R128.
- Lazy playlist scanning.
- Automatic switching between album and track mode.
- Takes advantage of multi-core systems.
* Faster rebuilding of album table index
* HTTP audio stream buffers much more quickly and flushes the buffer on seek.
* Fix volume ui going higher than 1.0.
* Fix changing volume not showing up on other clients.
* Native html5 audio streaming instead of soundmanager 2
* Streaming shows when it is buffering
* add meta charset=utf8 to index.html.
* fix volume keyboard shortcuts in firefox.
* Watches music library for updates and quickly updates library.
* Route dynamicmode through permissions framework
* Better default password generation
* web ui: fix current track not displayed sometimes
* upgrade jquery and jquery ui to latest stable. Fixes some UI glitches.
* static assets are gzipped and held permanently in memory. Makes the
web interface load faster.
* player: set "don't cache this" headers on stream
* Remove chat. It's not quite ready yet. Chat will be reimplemented better
in a future release.
* Remove stored playlist stub from UI. Stored playlists will be reimplemented
better in a future release.
* Josh Wolfe:
* Converting the code to not use MPD
* fix multiselect shiftIds
* deleting library items removes them from the queue as well.
* fix shift click going up in the queue
* after deleting tracks, select the next one, not some random one.
### 0.2.0 (Oct 16 2012)
* Andrew Kelley:
* ability to import songs by pasting a URL
* improve build and development setup
* update style to not resize on selection. closes #23
* better connection error messages. closes #21
* separate [mpd.js](https://github.com/andrewrk/mpd.js) into an open source module. closes #25
* fix dynamicmode; use higher level sticker api. closes #22
* search uses ascii folding so that 'jonsi' matches 'Jónsi'. closes #29
* server restarts if it crashes
* server runs as daemon
* server logs to rotating log files
* remove setuid feature. use authbind if you want to run as port 80
* ability to download albums and artists as zip. see #9
* ability to download arbitrary selection as zip. closes #9
* fix track 08 and 09 displaying as 0. closes #65
* fix right click for IE
* better error reporting when state json file is corrupted
* log chats
* fix edge case with unicode characters. closes #67
* fix next and previous while stopped behavior. closes #19
* handle uploading errors. fixes #59
* put link to stream URL in settings. closes #69
* loads faster and renders faster
* send a 404 when downloading can't find artist or album. closes #70
* read-only stored playlist support
* fix playlist display when empty
* add uploaded songs to "Incoming" playlist. closes #80
* fix resize weirdness when you click library tab. closes #75
* don't bold menu option text
* add color to the first part of the track slider. closes #15
* Josh Wolfe:
* fix dynamic mode glitch
* fix dynamic mode with no library or no tags file
* uploading with mpd <0.17 falls back to upload name
### 0.1.2 (Jul 12 2012)
* Andrew Kelley:
* lock in the major versions of dependencies
* more warnings about mpd conf settings
* remove "alert" text on no connection
* better build system
* move dynamic mode configuration to server
* server handles permissions in mpd.conf correctly
* clients can set a password
* ability to delete from library
* use soundmanager2 instead of jplayer for streaming
* buffering status on stream button
* stream button has a paused state
* use .npmignore to only deploy generated files
* update to work with node 0.8.2
* Josh Wolfe:
* pointing at mpd's own repository in readme. #12
* fixing null pointer error for when streaming is disabled
* fixing blank search on library update
* fixing username on reconnect
* backend support for configurable dynamic history and future sizes
* ui for configuring dynamic mode history and future sizes
* coloring yourself different in chat
* scrubbing stale user ids in my_user_ids
* better chat name setting ui
* scrolling chat window properly
* moar chat history
* formatting the state file
* fixing chat window resize on join/left
* validation on dynamic mode settings
* clearer wording in Get Started section and louder mpd version dependency
documentation
### 0.0.6 (Apr 27 2012)
* Josh Wolfe:
* fixing not queuing before random when pressing enter in the search box
* fixing streaming hotkey not updating button ui
* stopping and starting streaming in sync with mpd.status.state.
* fixing weird bug with Stream button checked state
* warning when bind_to_address is not also configured for localhost
* fixing derpy log reference
* fixing negative trackNumber scrobbling
* directory urls download .zip files. #9
* document dependency on mpd version 0.17
* Andrew Kelley:
* fix regression: not queuing before random songs client side
* uploaded songs are queued in the correct place
* support restarting mpd without restarting daemon
* ability to reconnect without refreshing
* log.info instead of console.info for track uploaded msg
* avoid the use of 'static' keyword
* David Banham:
* Make jPlayer aware of which stream format is set
* Removed extra constructor. Changed tabs to 2spaces
### 0.0.5 (Mar 11 2012)
* Note: Requires you to pull from latest mpd git code and recompile.
* Andrew Kelley:
* disable volume slider when mpd reports volume as -1. fixes #8
* on last.fm callback, do minimal work then refresh. fixes #7
* warnings output the actual mpd.conf path instead of "mpd conf". see #5
* resize things *after* rendering things. fixes #6
* put uploaded files in an intelligent place, and fix #2
* ability to retain server state file even when structure changes
* downgrade user permissions ASAP
* label playlist items upon status update
* use blank user_id to avoid error message
* use jplayer for streaming
* Josh Wolfe:
* do not show ugly "user_n" text after usernames in chat.
### 0.0.4 (Mar 6 2012)
* Andrew Kelley:
* update keyboard shortcuts dialog
* fix enter not queuing library songs in firefox
* ability to authenticate with last.fm, last.fm scrobbling
* last.fm scrobbling works
* fix issues with empty playlist. fixes #4
* fix bug with dynamic mode when playlist is clear
* Josh Wolfe:
* easter eggs
* daemon uses a state file
### 0.0.3 (Mar 4 2012)
* Andrew Kelley:
* ability to select artists, albums, tracks in library
* prevents sticker race conditions from crashing the server (#3)
* escape clears the selection cursor too
* ability to shift+click select in library
* right-click queuing in library works
* do not show download menu option since it is not supported yet
* show selection on expanded elements
* download button works for single tracks in right click library menu
* library up/down to change selection
* nextLibPos/prevLibPos respects whether tree items are expanded or collapse
* library window scrolls down when you press up/down to move selection
* double click artists and albums in library to queue
* left/right expands/collapses library tree when lib has selection
* handle enter in playlist and library
* ability to drag artists, albums, tracks to playlist
* Josh Wolfe:
* implement chat room
* users can set their name in the chat room
* users can change their name multiple times
* storing username persistently. disambiguating conflicting usernames.
* loading recent chat history on connect
* normalizing usernames and sanitizing username display
* canot send blank chats
* supporting /nick renames in chat box
* hotkey to focus chat box
### 0.0.2 (Mar 1 2012)
* Andrew Kelley:
* learn mpd host and port in mpd conf
* render unknown albums and unknown artists the same in the playlist (blank)
* auto-scroll playlist window and library window appropriately
* fix server crash when no top-level files exist
* fix some songs error message when uploading
* edit file uploader spinny gif to fit the theme
* move chat stuff to another tab
* Josh Wolfe:
* tracking who is online