5.6 KiB
Configuration
Sources
source URI of the PCM input stream, can be configured multiple times The following notation is used in this paragraph:
<angle brackets>
: the whole expression must be replaced with your specific setting[square brackets]
: the whole expression is optional and can be left out[key=value]
: if you leave this option out, "value" will be the default for "key"
Format:
TYPE://host/path?name=<name>[&codec=<codec>][&sampleformat=<sampleformat>][&chunk_ms=<chunk ms>]
parameters have the form key=value
, they are concatenated with an &
character
parameter name
is mandatory for all sources, while codec
, sampleformat
and chunk_ms
are optional
and will override the default codec
, sampleformat
or chunk_ms
settings.
Non blocking sources support the dryout_ms
parameter: when no new data is read from the source, send silence to the clients
Available types are:
pipe
pipe:///<path/to/pipe>?name=<name>[&mode=create][&dryout_ms=2000]
mode
can be create
or read
. Sometimes your audio source might insist in creating the pipe itself. So the pipe creation mode can by changed to "not create, but only read mode", using the mode
option set to read
librespot
librespot:///<path/to/librespot>?name=<name>[&dryout_ms=2000][&username=<my username>&password=<my password>][&devicename=Snapcast][&bitrate=320][&wd_timeout=7800][&volume=100][&onevent=""][&normalize=false][&autoplay=false]
note that you need to have the librespot binary on your machine
sampleformat will be set to 44100:16:2
TODO: description of the parameters
file
file:///<path/to/PCM/file>?name=<name>
TODO: description of the parameters
process
process:///<path/to/process>?name=<name>[&dryout_ms=2000][&wd_timeout=0][&log_stderr=false][¶ms=<process arguments>]
TODO: description of the parameters
airplay
airplay:///<path/to/airplay>?name=<name>[&dryout_ms=2000][&port=5000]
note that you need to have the airplay binary on your machine
sampleformat will be set to 44100:16:2
TODO: description of the parameters
tcp server
tcp://<listen IP, e.g. 127.0.0.1>:<port>?name=<name>[&mode=server]
default for port
(if omitted) is 4953, default for mode
is server
mopidy.conf (running GStreamer in client mode)
[audio]
output = audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! wavenc ! tcpclientsink
tcp client
tcp://<server IP, e.g. 127.0.0.1>:<port>?name=<name>&mode=client
mopidy.conf (running GStreamer in server mode)
[audio]
output = audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! wavenc ! tcpserversink
alsa
alsa://?name=<name>&device=<alsa device>
Snapcast v0.21 can capture audio from alsa, and to capture the output of a player, an alsa loopback device can be used:
-
setup the alsa loopback device by loading the kernel module:
sudo modprobe snd-aloop
-
the loopback device should show up in
aplay -l
aplay -l **** List of PLAYBACK Hardware Devices **** card 0: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM] Subdevices: 8/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7 card 0: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM] Subdevices: 8/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7 card 1: Intel [HDA Intel], device 0: CX20561 Analog [CX20561 Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: Intel [HDA Intel], device 1: CX20561 Digital [CX20561 Digital] Subdevices: 1/1 Subdevice #0: subdevice #0 card 2: CODEC [USB Audio CODEC], device 0: USB Audio [USB Audio] Subdevices: 0/1 Subdevice #0: subdevice #0
On my system it's card 0 with devices 0 and 1, each having 8 subdevices. You can address them with
hw:<card idx>,<device idx>,<subdevice num>
, i.e.hw:0,0,0
. If a process plays audio usinghw:0,0,x
, then this audio is looped back tohw:0,1,x
, so -
Configure your player to use a loopback device.
For mopidy (gstreamer) it should be something like this (not tested):
output = audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! wavenc ! alsasink device=hw:0,0,0
For mpd: in mpd.conf
audio_output_format "48000:16:2" audio_output { type "alsa" name "My ALSA Device" device "hw:0,0,0" # optional # auto_resample "no" # mixer_type "hardware" # optional # mixer_device "default" # optional # mixer_control "PCM" # optional # mixer_index "0" # optional }
-
Configure Snapserver to capture the loopback device:
[stream] stream = alsa://?name=SomeName&sampleformat=48000:16:2&device=hw:0,1,0