beets/docs/plugins/bpd.rst

140 lines
4.2 KiB
ReStructuredText

BPD Plugin
==========
BPD is a music player using music from a beets library. It runs as a daemon and
implements the MPD protocol, so it's compatible with all the great MPD clients
out there. I'm using `Theremin`_, `gmpc`_, `Sonata`_, and `Ario`_ successfully.
.. _Theremin: https://theremin.sigterm.eu/
.. _gmpc: http://gmpc.wikia.com/wiki/Gnome_Music_Player_Client
.. _Sonata: http://sonata.berlios.de/
.. _Ario: http://ario-player.sourceforge.net/
Dependencies
------------
Before you can use BPD, you'll need the media library called GStreamer (along
with its Python bindings) on your system.
* On Mac OS X, you can use `MacPorts`_ or `Homebrew`_. For MacPorts, just run
``port install py27-gst-python``. For Homebrew, the appropriate formulae are
in `homebrew-versions`_, so run ``brew tap homebrew/versions`` and then
``brew install gst-python010``. (Note that you'll need the Mac OS X
Developer Tools in either case.)
.. _homebrew-versions: https://github.com/Homebrew/homebrew-versions
* On Linux, it's likely that you already have gst-python. (If not, your
distribution almost certainly has a package for it.)
* On Windows, you may want to try `GStreamer WinBuilds`_ (cavet emptor: I
haven't tried this).
You will also need the various GStreamer plugin packages to make everything
work. See the :doc:`/plugins/chroma` documentation for more information on
installing GStreamer plugins.
.. _MacPorts: http://www.macports.org/
.. _GStreamer WinBuilds: http://www.gstreamer-winbuild.ylatuya.es/
.. _Homebrew: http://mxcl.github.com/homebrew/
Usage
-----
To use the ``bpd`` plugin, first enable it in your configuration (see
:ref:`using-plugins`).
Then, you can run BPD by invoking::
$ beet bpd
Fire up your favorite MPD client to start playing music. The MPD site has `a
long list of available clients`_. Here are my favorites:
.. _a long list of available clients: http://mpd.wikia.com/wiki/Clients
* Linux: `gmpc`_, `Sonata`_
* Mac: `Theremin`_
* Windows: I don't know. Get in touch if you have a recommendation.
* iPhone/iPod touch: `MPoD`_
.. _MPoD: http://www.katoemba.net/makesnosenseatall/mpod/
One nice thing about MPD's (and thus BPD's) client-server architecture is that
the client can just as easily on a different computer from the server as it can
be run locally. Control your music from your laptop (or phone!) while it plays
on your headless server box. Rad!
Configuration
-------------
To configure the plugin, make a ``bpd:`` section in your configuration file.
The available options are:
- **host**:
Default: Bind to all interfaces.
- **port**:
Default: 6600
- **password**:
Default: No password.
- **volume**: Initial volume, as a percentage.
Default: 100
Here's an example::
bpd:
host: 127.0.0.1
port: 6600
password: seekrit
volume: 100
Implementation Notes
--------------------
In the real MPD, the user can browse a music directory as it appears on disk.
In beets, we like to abstract away from the directory structure. Therefore, BPD
creates a "virtual" directory structure (artist/album/track) to present to
clients. This is static for now and cannot be reconfigured like the real
on-disk directory structure can. (Note that an obvious solution to this is just
string matching on items' destination, but this requires examining the entire
library Python-side for every query.)
We don't currently support versioned playlists. Many clients, however, use
plchanges instead of playlistinfo to get the current playlist, so plchanges
contains a dummy implementation that just calls playlistinfo.
The ``stats`` command always send zero for ``playtime``, which is supposed to
indicate the amount of time the server has spent playing music. BPD doesn't
currently keep track of this.
The ``update`` command regenerates the directory tree from the beets database.
Unimplemented Commands
----------------------
These are the commands from `the MPD protocol`_ that have not yet been
implemented in BPD.
.. _the MPD protocol: http://www.musicpd.org/doc/protocol/
Saved playlists:
* playlistclear
* playlistdelete
* playlistmove
* playlistadd
* playlistsearch
* listplaylist
* listplaylistinfo
* playlistfind
* rm
* save
* load
* rename
Deprecated:
* playlist
* volume