The sc2mpd auxiliary process implements part of Linn Songcast support for the upmdcli UPnP MPD front-end. Specifically, it implements a Songcast Receiver service, managed by upmpdcli.
To use it, you need the Linn Songcast application installed on a Microsoft Windows or Apple Mac OS X PC. See further for more explanations about what this does.
sc2mpd has mostly been tested with 16 bits sound but a recent change
seems to have fixed 24 bits sound, so this should be now usable for
MACs. This needs mpd 0.19 on the renderer. Do not try 24 bits sound with
mpd 0.18 ! (or turn the volume very low…). Using Songcast from a Mac (24
bits audio) needs mpd 0.19, configured with --disable-audiofile
.
As Debian and Ubuntu tend to lag quite bit on MPD progresses, I have set up
backport repositories for recent mpd versions
(currently 0.19.9), for Ubuntu, Debian i386/amd64 and Raspbian.
And to conclude the misc warnings section: there is no software volume control of the Songcast Receivers for now: use either a local mixer or the little round things on the power amps.
There are Debian Wheezy sc2mpd packages in the upmpdcli repository for i386, amd64 and Raspberry Pi (Raspbian): see the upmpdcli download page, so you do not need to build any software if you use these systems.
Note
|
you know what Songcast is and have a Rasberry PI which wants to play: quick install for the Raspberry PI (also works for i386 and amd64 Debian Wheezy). |
What is Linn Songcast
Songcast is a protocol for transporting audio streams across the network, developped by Linn as a series of open-source libraries and applications.
The protocol links two types of entities:
-
A Songcast Sender generates an audio stream (Windows or Mac).
-
Songcast Receivers receive and play the stream.
There are Songcast applications (Senders) for Windows and Mac OS X (nothing for Linux, iOS or Android for now). The Songcast application captures and forward the system audio stream to a remote Songcast Receiver.
Any application on the desktop (Windows Media Player, Spotify, Tidal, etc.) will transparently play to the remote device, without any need to know about Songcast. Any audio service available on Windows or the Mac can be forwarded to one or many audio players around the house.
The Songcast streams are real-time audio data, which can go straight to an audio card for playing.
Controlling the streams (connecting, starting, stopping) is done through an UPnP service named OpenHome Receiver, which runs on an UPnP Media Renderer implementing the OpenHome services (e.g. upmpdcli).
Implementation of Songcast support in upmpdcli
upmpdcli implements the Receiver service, and uses an auxiliary process (sc2mpd) for transporting the audio data. sc2mpd is a slight modification of the sample program which comes with the Linn Songcast open-source implementation
sc2mpd can play the audio stream in two modes:
-
By offering a local HTTP interface (based on libmicrohttpd) from which mpd will play the stream.
-
By directly using the alsa audio driver. This only works with 16 bits sound for now (so only with a Windows sender, no Macs allowed)
What approach is used is decided by a parameter in the upmpdcli
configuration file: scplaymethod
(see [Configuration] further)
Control:
-
If upmpdcli finds an executable sc2mpd command in the PATH when starting up, it advertises a Receiver service.
-
The Songcast application on the desktop finds out about the Receiver through the normal UPnP mechanisms and can be instructed to use it. It then tells the Receiver in upmpdcli to start playing.
-
upmdpcli starts the sc2mpd process, which gets ready to receive data through Songcast, and either play it directly or make it available through HTTP.
-
If the
mpd
method is in use, upmpdcli instructs mpd to play the URL for the sc2mpd output.
When using mpd
more bufferisation occurs and there may be a significant
delay (up to around 10S) between the time when Songcast is activated and
the time sound appears.
Given the bufferisation and delay control issues when going through MPD,
only the alsa
method is usable in multi-room configurations. Even with a
single player, the mpd
method will experience skips from time to
time. The reasons are explained in the multi-room
page.
Quick install for Debian Wheezy systems
There are packages available for Raspbian and Debian Wheezy i386 and amd64.
So add the repositories:
echo deb http://www.lesbonscomptes.com/upmpdcli/downloads/debian/ unstable main | sudo tee /etc/apt/sources.list.d/upmpdcli.list
echo deb-src http://www.lesbonscomptes.com/upmpdcli/downloads/debian/ unstable main | sudo tee -a /etc/apt/sources.list.d/upmpdcli.list
echo deb http://www.lesbonscomptes.com/upmpdcli/downloads/mpd-debian/ unstable main | sudo tee -a /etc/apt/sources.list.d/upmpdcli.list
echo deb-src http://www.lesbonscomptes.com/upmpdcli/downloads/mpd-debian/ unstable main | sudo tee -a /etc/apt/sources.list.d/upmpdcli.list
Install (the mpd and libupnp versions in the repo have bug fixes):
sudo apt-get update
sudo apt-get install upmpdcli sc2mpd mpd libupnp6
And seed the next section for configuring.
Configuration
On the Receiver side
No configuration is necessary by default: if sc2mpd is present, upmpdcli will advertise the Songcast capability, and any host with a Songcast sender installed should be able to use it.
However, you can set a number of values in the upmpdcli configuration file
(you must set the upmpdcli -c
option for sc2mpd to see them, the
environment variable will not work):
- scplaymethod
-
This decides how audio is played, with 2 possible values,
alsa
ormpd
. Usingmpd
is somewhat easier, but unusable in multi-room configurations, and you risk small drops even in single-player settings. - scalsadevice
-
If the
alsa
method is set, thescalsadevice
parameter defines the interface name. Useaplay -L
to find the appropriate name. Also check that userupmpdcli
belongs to theaudio
group. - sclogfilename
-
Name of the file which will receive sc2mpd log messages.
stderr
by default. This can’t be the same file used by upmpdcli. - scloglevel
-
Log verbosity.
- schttpport
-
If the
mpd
method is set, this defines the HTTP port used by mpd to connect to sc2mpd. 8768 by default. This must be an available port onlocalhost
, and it will only accept connections fromlocalhost
. - sc2mpd
-
Path for the sc2mpd executable file (e.g.
/usr/local/bin/sc2mpd
). Only useful if sc2mpd was not installed to a location in the executable $PATH set for the init scripts. Typically only/bin
and/usr/bin
are in there. This allows upmpdcli to find sc2mpd if it is not in the standard location.
On the Sender (Windows/Mac) side
I could not get IP multicast to work with WIFI Receivers (the sound drops constantly).
There are well-known problems with multicast and WIFI (see for example this superuser.com question for detailed explanations). This seems to be dependant on the WIFI hardware (router/access points) used, so maybe you will have more luck than me.
If some of your Receivers use WIFI, and you experience sound issues, check that "Unicast" is selected in the Songcast configuration "advanced" panel on the desktop.
Under most conditions, WIFI data rates should be more than sufficient to transport Songcast streams (a bit over 1 Mbit/S for 48k/24bits, 700 Kbits/S for 44.1k/16 bits).
Building sc2mpd
There are two parts in building sc2mpd:
-
Building the Openhome libraries
-
Building sc2mpd proper
First download a sc2mpd release or clone the sc2mpd Github repository.
sc2mpd depends on a number of libraries:
-
The microhttpd library. Install the development and runtime packages which are currently named libmicrohttpd-dev and libmicrohttpd10 on Debian-derived systems (use libmicrohttpd and libmicrohttpd-devel for Fedora).
-
The libsamplerate library. libsamplerate0 on debian-derived systems.
-
The libasound Alsa interface library (libasound2).
Building the Openhome libraries is a bit of a black art, and the sc2mpd source comes with an ohbuild.sh script which will try to clone the Openhome Git repositories and build the libs:
cd sc2mpd
mkdir /my/place/for/openhome
sh ohbuild.sh /my/place/for/openhome
Miscellaneous error messages will be displayed during the build. Hope for the best…
When this is done, build sc2mpd, using the following commands inside the sc2mpd directory:
sh autogen.sh
./configure --prefix=/usr --with-openhome=/my/place/for/openhome
make
sudo make install
The build uses static Openhome libraries, so you can move the executable to another machine without needing the Openhome directory (don’t forget to install the libmicrohttpd, libsamplerate and libasound runtimes though).
After restarting upmpdcli, it should advertise the Receiver service and appear in the Songcast Sender menus.
Miscellaneous remarks
Songcast is probably best transported over a wired connection. If you are doing this over WIFI and experiencing glitches, the wireless is the first suspect.