Requirement
There are only a million RPi music server projects so I am sure there is room for 1,000,001. I already have speakers in a number of rooms for the radio, hifi and sound bar and they work well so I don't want to duplicate or replace them. Current systems are all a few years old so don't have built in bluetooth connectivity. However I would like to be able to use bluetooth and listen to the same music throughout the house and to have the entire music collection in one place.Sonos is the current vogue for multi-room music. Music is stored on a NAS or PC and each device stores an index of available tracks and their location. It is controlled via a phone app which does not need to be active unless you want to change something. It is not suitable for my requirement due to the need to buy lots of hardware but the music server approach seems good.
I am very fond of the Pure Jongo A2 bluetooth hifi adapter. It attaches to any music device with phono inputs and allows you to play music from your phone or tablet using bluetooth. It can also route music from NAS or internet radio channels to a sound system. It also has a wonderful feature called "caskeid" which shares music between Jongo devices so that you can listen to the same sounds in multiple rooms. There are Jongo speakers which can add sounds in extra rooms or outside. These features make Jongo an excellent basis for a multi-room system but there are a couple of catches. Firstly, your phone/tablet needs to stream the music to Jongo. You can't move it to a different room or turn it off. Secondly Pure appear to have lost the multi-room battle to Sonos and are discontinuing their Jongo range. In fact this means prices for that A2s (£20) and speakers (£50-£150) are reasonable on Amazon or Ebay so it makes for an affordable system.
Design
Hardware
I currently have a RPi which is used as a NAS so it makes sense to use it as a music server as well. The current device is B+ so I need to plug in a USB bluetooth adapter which will communicate with one of the Jongos.I already have three Jongo A2 attached to my study HiFi, TV sound bar and kitchen mini-system so these will form the core of the playback system. I will add a Jongo speaker and another A2 to allow two more rooms to be linked in. I may buy another outdoor specification Jongo for use in a bathroom. All devices will be setp via the Pure Connect app with caskeid so that they synchronise playback.
Software
RPi software setup will comprise the bulk of the project. The obvious music server to use is MPD which is a long-term component of linux. It plays music from multiple sources, namely local disks or network URLs which may represent web music (http), NAS (smb) or streams (pls). Files can be added into playlists (m3u). Mopidy was investigated as a popular alternative to MPD but doesn't seem to have important extra features.An advantage of using MPD is that it is a standard product so there are many clients available to control it (play/pause, create/load playlists, etc). MPDroid or M.A.L.P can be used on Android, MPDluxe (£2.99) on IoS and Auremo was chosen for the Windows as I have previously found it useful. In addition to these platform specific apps there is a small package called ympd which runs as a small RPi python web server to allow MPD to be controlled from a browser window. There are other web-based clients but they have more complex/specific requiremetns for web-server, database etc. As a backstop the standard linux music client MPC can be used via an ssh session (mobaxterm/putty on Windows, reflection on iPad) or at the RPi console / GUI.
The RPi will continue to be used "headless" so generally the GUI will not be present, although it is useful during testing.
I have found bluetooth and audio routing problematical on RPi previously. Bluetoothctl and pulseaudio for sound routing are pretty standard so I will need to make them reliable.
Media
Existing music collection stored on large USB stick will be available, I would also like to setup a number of radio streams and access playlists in my Rplay no-advert radio system.Installation
This is intended to be a reasonably high-level description of the installation in April 2018 on PI3, a RPi B+ running Raspbian Stretch.Step 1 Software installation
Bluetooth software on RPi has changed a lot of the past two or three years with new versions of raspbian so it is best not to use old tutorials, this one seems quite recent.Update linux: # apt-get update;apt-get upgrade; apt-get dist-upgrade; rpi-update
Install bluetooth/pulse audio: # apt-get install blueman pulseaudio pulseaudio-module-bluetooth
Install music software: # apt-get install mpd mpc mpg123
Step 2 Sound testing
I don't have speakers connected to PI3 by default so initially I connected some and made sure that playing an mp3 file using the command line player mpg123 resulted in sounds. Note that not all mp3 players support .mp3 files and many don't recognize pulseaudio, so mpg123 is a good choice.I also used the GUI initially. There are bluetooth icons on the menu bar on the top right of the screen.
I made sure that my Jongo A2 was visible by running bluetooth setup from the icon and ensuring it was paired and trusted but not connected. Then, right-clicking on the speaker icon and selecting the bluetooth speaker caused the bluetooth speaker to burst into life. There was some trial and error involved, in particular pulseaudio didn't always seem to be running which prevented bluetooth being used with mpg123. Once this step is complete we know that we can play music on PI3 through a bluetooth speaker using the GUI.
Step 3 MPD Music Server
MPD (Music Player Daemon) is a venerable but widely used music server for Linux. It contains a database of song titles and plays to a music device. MPC (Music Player Client) is the corresponding linux command line client software which allows music to be started, stopped, re-indexed and playlists to be managed. As installed MPD doesn't support pulseaudio properly because pulseaudio is running as pi and cant communicate with the mpd user. The wiki explains how to setup MPD so it streams to localhost (127.0.0.1) which pulseaudio can read and send to bluetooth.Once mpd is setup music can be stored in /var/lib/mpd/music. CIFS/SMB shares on other devices can be accessed by specifying mount points in /var/lib/mpd/music. For example I setup a mount point for my RPi NAS at /var/lib/mpd/music/rpipmusic/ with:
sudo mount -t cifs /<nas ip>/<nas share>/ /var/lib/mpd/music/rpipmusic / -o user=x, pass=x
In addition MPD accepts urls as file locations. These may be http://server/folder/song.mp3 or streaming radio URLs.
No comments:
Post a Comment