squeezelite - Lightweight headless Squeezebox emulator
Squeezelite is a small headless Logitech Squeezebox
emulator. It is aimed at supporting high quality audio including USB DAC
based output at multiple sample rates.
The player is controlled using, and media is streamed from, a
Logitech Media Server instance running somewhere on the local network.
This program supports the following options:
- -?
- Show a summary of the available command-line options.
- -s <server>[:<port>]
- Connect to the specified Logitech Media Server, otherwise uses automatic
discovery to find server on the local network. This option should only be
needed if automatic discovery does not work, or the server is not on the
local network segment (e.g. behind a router).
- -o <output
device>
- Specify the audio output device; the default value is default. Use
the -l option to list available output devices. - can be
used to output raw samples to standard output.
- -l
- List available audio output devices to stdout and exit. These device names
can be passed to the -o option in order to select a particular
device or configuration to use for audio playback.
- -a <params>
- Specify parameters used when opening an audio output device.
For ALSA, the format
<b>:<p>:<f>:<m>:<d> is used where
<b> is the buffer time in milliseconds (values less than 500) or
size in bytes (default 40ms); <p> is the period count
(values less than 50) or size in bytes (default 4 periods);
<f> is the sample format (possible values: 16, 24,
24_3 or 32); <m> is whether to use mmap (possible
values: 0 or 1). <d> open ALSA output device twice.
(possible values: 0 or 1).
For Linux PortAudio, the value <l> is simply the
target latency in milliseconds.
For MacOS, <l>:<r> <l> is target
latency in milliseconds. <r> open device in Pro Mode or Play
Nice (respective values: 0 or 1).
For Windows, <l>:<e> <l> is target
latency in milliseconds. <e> use exclusive mode for WASAPI
(possible values: 0 or 1).
When the output is sent to standard output, the value can be
16, 24 or 32, which denotes the sample size in bits.
Little Endian only.
- -b
<stream>:<output>
- Specify internal stream and output buffer sizes in kilobytes. Default is
2048:3446.
- -c
<codec1>,...
- Restrict codecs to those specified, otherwise load all available codecs.
Use squeezelite -? to obtain the list of codecs built into
squeezelite.
- -C <timeout>
- Close the output device after <timeout> seconds of the player
being idle; the default is to always keep the device open as long as the
payer is "on".
- -d
<category>=<level>
- Set logging level. Categories are: all, slimproto,
stream, decode, output or ir. Levels can be:
info, debug or sdebug. The option can be repeated to
set different log levels for different categories.
- -e
<codec1>,...
- Explicitly exclude native support of one or more codecs. See also
-c, above.
- -f <logfile>
- Send logging output to a log file instead of standard output or standard
error.
- -G <Rpi
GPIO#>:<H/L>
- Specify the BCM GPIO# to use for Amp Power Relay and if the output should
be Active High or Low. This cannot be used with the -S option.
- -i
[<filename>]
- Enable LIRC remote control support. If the optional
<filename> is not provided, ~/.lircrc is used
instead.
- -m <mac addr>
- Override the player's MAC address. The format must be colon-delimited
hexadecimal, for example: ab:cd:ef:12:34:56. This is usually automatically
detected, and should not need to be provided in most circumstances.
- -M <modelname>
- Override the player's hardware model name. The default value is
SqueezeLite.
- -n <name>
- Set the player name. This name is used by the Logitech Media Server to
refer to the player by name. This option is mututally exclusive with
-N.
- -N <filename>
- Allow the server to set the player's name. The player name is stored in
the file pointed to by <filename> so that it can persist
between restarts. This option is mututally exclusive with -n.
- -O <mixer
device>
- Specify mixer device, defaults to <output device>.
- -p <priority>
- Set real time priority of output thread (1-99; default 45). Not
applicable when using PortAudio.
- -P <filename>
- Write the process ID (PID) number to the given <filename>.
This may be useful when running squeezelite as a daemon.
- -r
<rates>[:<delay>]
- Specify sample rates supported by the output device; this is required if
the output device is switched off when squeezelite is started. The
format is either a single maximum sample rate, a range of sample rates in
the format <min>-<max>, or a comma-separated
list of available rates. Delay is an optional time to wait when switching
sample rates between tracks, in milliseconds.
- -S <power
script>
- Absolute path to script to launch on power commands from LMS. This cannot
be used with the -G option.
- -u|-R [params]
- Enable upsampling of played audio. The argument is optional; see
RESAMPLING (below) for more information. The options -u and
-R are synonymous.
- -D [delay]
- Output device supports DSD over PCM (DoP). DSD streams will be converted
to DoP before output. If this option is not supplied, DSD streams will be
converted to PCM and resampled, so they can be played on a PCM DAC. Delay
is an optional time to wait when switching between PCM and DoP between
tracks, in milliseconds.
- -v
- Enable visualiser support. This creates a shared memory segment that
contains some of the audio being played, so that an external visualiser
can read and process this to create visualisations.
- -W
- Read wave and aiff format from header, ignoring server parameters.
- -L
- List available volume controls for the output device. Only applicable when
using ALSA output.
- -U <control>
- Unmute the given ALSA <control> at daemon startup and set it
to full volume. Use software volume adjustment for playback. This option
is mutually exclusive with the -V option. Only applicable when
using ALSA output.
- -V <control>
- Use the given ALSA <control> for volume adjustment during
playback. This prevents the use of software volume control within
squeezelite. This option is mutually exclusive with the -U
option. If neither -U nor -V options are provided, no ALSA
controls are adjusted while running squeezelite and software volume
control is used instead. Only applicable when using ALSA output.
- -X
- Use linear volume adjustments instead of in terms of dB (only for hardware
volume control).
- -z
- Cause squeezelite to run as a daemon. That is, it detaches itself
from the terminal and runs in the background.
- -Z <rate>
- Report rate to server in helo as the maximum sample rate we can
support.
- -t
- Display version and license information.
Audio can be resampled or upsampled before being sent to the
output device. This can be enabled simply by passing the -u option to
squeezelite, but further configuration can be given as an argument to
the option.
Resampling is performed using the SoX Resampler library; the
documentation for that library and the SoX rate effect many be
helpful when configuring upsampling for squeezelite.
The format of the argument is
<recipe>:<flags>:<attenuation>:<precision>:<passband_end>:<stopband_start>:<phase_response>
This part of the argument string is made up of a number of
single-character flags: [v|h|m|l|q][L|I|M][s][E|X]. The default value
is hL.
- v, h, m,
l or q
- are mutually exclusive and correspond to very high, high, medium, low or
quick quality.
- L, I or
M
- correspond to linear, intermediate or minimum phase.
- s
- changes resampling bandwidth from the default 95% (based on the 3dB point)
to 99%.
- E
- exception - avoids resampling if the output device supports the playback
sample rate natively.
- X
- resamples to the maximum sample rate for the output device
("asynchronous" resampling).
- Examples
- -u vLs would use very high quality setting, linear phase filter and
steep cut-off.
-u hM would specify high quality, with the minimum phase filter.
-u hMX would specify high quality, with the minimum phase filter and
async upsampling to max device rate.
The second optional argument to -u allows the user to
specify the following arguments (taken from the soxr.h header file),
in hex:
#define SOXR_ROLLOFF_SMALL 0u /* <= 0.01 dB */
#define SOXR_ROLLOFF_MEDIUM 1u /* <= 0.35 dB */
#define SOXR_ROLLOFF_NONE 2u /* For Chebyshev bandwidth. */
#define SOXR_MAINTAIN_3DB_PT 4u /* Reserved for internal use. */
#define SOXR_HI_PREC_CLOCK 8u /* Increase 'irrational' ratio accuracy. */
#define SOXR_DOUBLE_PRECISION 16u /* Use D.P. calcs even if precision <=
20. */
#define SOXR_VR 32u /* Experimental, variable-rate resampling. */
- Examples
- -u :2 would specify SOXR_ROLLOFF_NONE.
NB: In the example above the first option,
<quality>, has not been specified so would default to
hL. Therefore, specifying -u :2 is equivalent to having
specified -u hL:2.
Internally, data is passed to the SoX resample process as 32 bit
integers and output from the SoX resample process as 32 bit integers. Why
does this matter? There is the possibility that integer samples, once
resampled may be clipped (i.e. exceed the maximum value). By default, if you
do not specify an attenuation value, it will default to -1db. A value
of 0 on the command line, i.e. -u ::0 will disable the default
-1db attenuation being applied.
NB: Clipped samples will be logged. Keep an eye on the log
file.
- Examples
- -u ::6 specifies to apply -6db (ie. halve the volume) prior to the
resampling process.
The internal 'bit' precision used in the re-sampling calculations
(ie. quality).
NB: HQ = 20, VHQ = 28.
- Examples
- -u :::28 specifies 28-bit precision.
A percentage value between 0 and 100, where 100 is the Nyquist
frequency. The default if not explicitly set is 91.3.
- Examples
- -u ::::98 specifies passband ends at 98 percent of the Nyquist
frequency.
A percentage value between 0 and 100, where 100 is the Nyquist
frequency. The default if not explicitly set is 100.
- Examples
- -u :::::100 specifies that the stopband starts at the Nyquist
frequency.
A value between 0-100, where 0 is equivalent to the recipe
M flag for minimum phase, 25 is equivalent to the recipe
I flag for intermediate phase and 50 is equivalent to the
recipe L flag for linear phase.
- Examples
- -u ::::::50 specifies linear phase.