111 lines
3.8 KiB
Markdown
111 lines
3.8 KiB
Markdown
Blissify
|
||
========
|
||
|
||
Blissify is a wrapper around
|
||
[Bliss](https://github.com/Polochon-street/bliss) to compute and store values
|
||
in an SQLite database.
|
||
|
||
It is done in an attempt to bind Bliss to MPD to be able to play
|
||
smooth mixes with MPD, _à la_ Grooveshark radio.
|
||
|
||
## Dependencies
|
||
|
||
To build it you will need `sqlite3`, plus the required
|
||
dependencies from `bliss` (see
|
||
[https://github.com/Polochon-street/bliss](https://github.com/Polochon-street/bliss)).
|
||
|
||
|
||
## Build
|
||
|
||
```
|
||
git clone --recursive https://github.com/phyks/blissify
|
||
cd blissify; mkdir build; cd build
|
||
cmake ..
|
||
make
|
||
```
|
||
|
||
This will build a `blissify` executable.
|
||
|
||
|
||
## Usage
|
||
|
||
This repo contains several codes and scripts.
|
||
|
||
## The main `blissify` executable
|
||
|
||
The main `blissify` executable can be used to compute the values necessary to
|
||
use Bliss for various song files and store them in a SQLite database.
|
||
|
||
This executable takes a first argument being the basepath and a list of
|
||
filenames relative to this basepath as argument. It will compute values using
|
||
Bliss and store them in a SQLite database located in
|
||
`$XDG_DATA_HOME/blissify/db.sqlite3` (defaults to
|
||
`~/.local/share/blissify/db.sqlite3`).
|
||
|
||
You can do whatever you want with this db afterwards.
|
||
|
||
|
||
## The MPD server-side script
|
||
|
||
In the `mpd/` folder of this repo, you will find a `server.py` script. This is
|
||
a simple Python script to easily build the database from your MPD music
|
||
library. It calls `blissify` under the hood, so note that the `blissify`
|
||
executable **SHOULD** be in your `$PATH`.
|
||
|
||
It takes a `mpd_root` argument to set the top path of your MPD music library.
|
||
You can use either
|
||
|
||
* `--full-rescan` to purge the db and perform a full scan of your MPD music
|
||
library.
|
||
* `--rescan-errored` to scan failed files stored in database (from a previous
|
||
run). This option is usable even if you do not use MPD.
|
||
* `--update` to perform an update based on new additions to the library.
|
||
* `--listen` to listen to MPD IDLE signals on database update and update the
|
||
database accordingly in realtime.
|
||
|
||
Connection to your MPD server is handled by `$MPD_HOST` and `$MPD_PORT`
|
||
(defaulting to `localhost` and `6600`), as described in `mpc` man page.
|
||
|
||
|
||
_Note_: This step can be quite long. It took me around 50 hours to build the
|
||
database for a library with 50k songs.
|
||
|
||
## The MPD client-side script
|
||
|
||
Once you have built the database, you may want to play a continuous mix with
|
||
MPD. This is the purpose of the `client.py` script in `mpd/×` folder.
|
||
|
||
This script also uses the same environment variables as `mpc` does to connect to your MPD server.
|
||
|
||
_Note_: This script needs to have access to the database you built previously.
|
||
Then, you should either copy the database on the client (in the same
|
||
`$XDG_DATA_HOME/blissify` folder) or run it on the server.
|
||
|
||
It takes a single (optional) argument which is the number of songs to add to the playlist. Default is 20.
|
||
|
||
It builds a continuous mix starting from the latest song in your playlist. If your playlist is empty, it will start from a random song.
|
||
|
||
_Note_: If random mode is enabled in MPD, the script will warn you about it. Indeed, in this case, the mix is no longer continuous.
|
||
|
||
|
||
## The cache building script
|
||
|
||
Finally, in `scripts` folder, you will find a Python script `build_cache.py` to
|
||
build the distances cache.
|
||
|
||
Whenever you want to create a continuous mix, the client script will iterate
|
||
through your music library, compute pairwise distances and take a close enough
|
||
song. These computed distances are stored in the database as a cache, to
|
||
generate a playlist faster the next time.
|
||
|
||
This `build_cache.py` script can be used to precompute the pairwise distances
|
||
and build the cache, if you are willing to make some extra computation to
|
||
generate mixes faster.
|
||
|
||
|
||
## License
|
||
|
||
This code is distributed under an MIT license.
|
||
|
||
Feel free to contribute and reuse. For more details, see `LICENSE` file.
|