Partyzone allows one to syncronise music across a number of devices.
It consists of a player which is installed on a device with a amplifier / speaker. You can have a number of players on one device. For example I have a netbook with four usb soundcards plugged into a usb hub. The output of these then each go to a cheap ebay amplifier and then speaker.
There are systemd files in the source that start all the parts but here I will describe running manually.
First as the system is built on pyro4 so we first run the pyro4 nameserver.
/usr/bin/python /usr/local/bin/pyro4-ns -n 0.0.0.0
the -n 0.0.0.0 makes the nameserver availiable over the network.
All the players have to sync their audio with a network clock. To start that clock we need to run
/opt/PartyZone/netclock.py --host 192.168.1.6
--host is the ip of the system you run the clock from.
Now we can start the player (one of many)
/opt/PartyZone/partyzone --player --name "Kitchen" --host 192.168.1.9 --card hw:2,0
This would start a player on a device with ip 192.168.1.9. --card hw:2,0 tells the player which alsa device to use. the --name parameter is used by the web frontend.
the webfrontend uses a Beets music library to play to the players.
Beets plugin
Within the beetsplug directory is a beets plugin and web frontend written in Aurelia. http://beets.io/ is a Python music indexer / metadata system. I created a beets plugin called partyzone that helps send the music to the players. To run this plugin Add the plugin directory to the Python path ie export PYTHONPATH="${PYTHONPATH}:/opt/PartyZone" Edit the beets config file vim ~/.config/beets/config.yaml Add the following directory: /home/media/music library: ~/musiclibrary.blb plugins: partyzone partyzone: host: 192.168.1.6 port: 5000 Once the config is save you have to index your music For importing read https://beets.readthedocs.org/en/v1.3.17/guides/main.html I used beet import -A /media/External/Music Once index simply run my plugin beet partyzone --debug This will start a webserver you can access on port 5000
You must then build the Aurelia web frontend.
Ie
cd beetsplug/web/; webpack
You must serve the files created in beetsplug/web/dist
The webpages look like below.