Releases: mikebrady/shairport-sync
Really Big Update -- AirPlay 2!
Version 4.1 brings support for AirPlay 2 operation. It works with iOS, iPadOS, macOS, HomePod mini and Apple TV sources, but not with Windows.
Limited support is available for HomeKit – Shairport Sync speakers can be added to the Home app, though not all features are working.
AirPlay 2 operation requires a companion program called NQPTP and requires a somewhat more powerful system. Please see AIRPLAY2.md for more.
Note that you can still build Shairport Sync to support "classic" AirPlay (aka "AirPlay 1") as before.
The various guides for building and updating Shairport Sync have been consolidated into BUILD.md.
Here is a brief initial list of the high-level new features and changes:
- AirPlay 2 support.
- Improved
libao
backend for better compatibility with HomeBrew installations. - Improved MQTT and D-Bus facilities.
- Metadata improvements.
- Automatically-generated Docker images.
There have been many many bug fixes and enhancements to the core operation of Shairport Sync.
Many thanks to everyone who contributed to Shairport Sync now and in the past.
Really Big Update -- AirPlay 2!
Version 4.1 brings support for AirPlay 2 operation. It works with iOS, iPadOS, macOS, HomePod mini and Apple TV sources, but not with Windows.
Limited support is available for HomeKit -- Shairport Sync speakers can be added to the Home app, though not all features are working.
AirPlay 2 operation requires a companion program called NQPTP and requires a somewhat more powerful system. Please see AIRPLAY2.md for more.
Note that you can still build Shairport Sync to support "classic" AirPlay (aka "AirPlay 1") as before.
The various guides for building and updating Shairport Sync have been consolidated into BUILD.md.
Here is a brief initial list of the high-level new features and changes:
- AirPlay 2 operation.
- Improved
libao
backend for better compatibility with HomeBrew installations. - Improved MQTT and D-Bus facilities.
- Metadata improvements.
- Automatically-generated Docker images.
There have been many many bug fixes and enhancements to the core operation of Shairport Sync.
Changes
Changes in 4.1-rc1:
- Bug fixes: close DAC when SPS goes inactive under the "auto" setting.
- Fix some minor Makefile issues.
- Documentation: Improved "Events.md" page.
Changes in 4.1-rc2:
- Bug fixes: Fix a memory allocation crashing bug. Fix two memory leaks.
- Start using
libgcrypt
again to avoid a memory leak inlibcrypto
. - Documentation updates.
IMPORTANT -- the libgcrypt
library is now needed (again) for building Shairport Sync -- see the BUILD.md guide.
Changes in 4.1-rc3:
- Bug fix: Fix an elusive crashing bug when a session key is missing from an AirPlay 2 play request.
- Enhancement: Add a new information/debugging option
--displayConfig
or-X
. - Enhancement: Improve debug messaging with
libdaemon
. - Enhancement: Help message update.
- Enhancement: The
xmltoman
library is no longer needed. - Enhancement: Improve the use of lightweight
git
tags used by GitHub to tag releases. - Documentation: Update
man
page. - Documentation: Add a page on adjusting synchronization to match other speakers.
Changes in 4.1-rc4:
- Bug fix: Fix a bug that delayed metadata appearing in the D-Bus, MPRIS and MQTT interfaces.
- Docker: Additional command line arguments to the docker run command are passed to the shairport-sync application on the AirPlay 2 docker image.
- Docker: Use the s6-overlay system on the Classic docker image.
- Enhancement: Clean up the generation of Play/Pause/Stop conditions. Add true Pause for AirPlay 2 Buffered streams.
- Documentation: Some cleanups and updates.
Changes in 4.1-rc5:
- Docker: start using
latest
androlling
tags like Ubuntu and usedevelopment
tags as well. - Enhancement: tidy up the
--display_config
output to skip empty stanzas and to note if there are not active settings whatever.
Automake Building Bug Fix
Version 3.3.9 is a single bug fix release.
Bug Fix
- Version 3.3.9 fixes a build failure with convolution raised since
automake 1.16.5
and https://git.savannah.gnu.org/cgit/automake.git/commit/?id=f4a3a70f69e1dbccb6578f39ef47835098a04624
Further details in Fabrice Fontaine's original PR to thedevelopment
branch. Many thanks to Fabrice Fontaine for the bug report and for the fix.
Details
- Please refer to the RELEASENOTES.md for full details of Version 3.3.
Bug Fixes and Enhancements
Version 3.3.8 brings many bug fixes and enhancements and is recommended for all users.
Enhancements
- Documentation for the MQTT interface. Many thanks to minix1234!
Bug Fixes
- Fix a bug in the
alsa
back end. In the interval between checking that the alsa device handle was non-NULL
and actually using it, the handle could be set toNULL
. The interval between check and usage is now protected. - Fix a bug in the
alsa
precision timing code. Thanks to durwin99, Nicolas Da Mutten, mistakenideas, Ben Willmore and giggywithit for the report. - Fix a bug that caused Shairport Sync to hang, but not actually crash, if an
on-...
script failed. - Fix a crash that occurred if metadata support is enabled during compilation but turned off in the configuration file. Thanks to Tim Curtis for the report.
- Fix a crash that occurred playing from AirPower on Android. Thanks to Ircama for the report.
- Fix the
configure.ac
file so that--without-<feature>
configuration options are not interpreted as--with-<feature>
options instead! Thanks to David Racine for the report.
Details
- Please refer to the RELEASENOTES.md for full details.
Version 3.3.7 – Bug Fixes, Enhancements and a New Feature
Version 3.3.7 brings many bug fixes and enhancements and a new feature and is recommended for all users.
-
For the PulseAudio backend
pa
, added a newserver
entry to thepa
section of the configuration file, allowing you to specify a connection to a remote or a local system PulseAudio instance instead of letting PulseAudio choose. Thanks to Guillaume Revaillot for this new feature. -
Please refer to the RELEASENOTES.md for full details.
Version 3.3.6 – Jack Audio Resampling, Bug Fixes and Enhancements
New Features
- Resampling has been added for the Jack Audio backend. This can be used to up-sample to 192kHz. Thanks to Pieter De Gendt for this new feature.
Bug Fixes and Enhancements
- Please refer to the release notes for Version 3.3.6.
Version 3.3.5 – Minor Bug Fixes and Enhancements to the D-Bus Interface
This update contains two bug fixes and enhancements to the D-Bus interface. It is recommended for all users.
For details, please refer to the Release Notes for Version 3.3.5..
Thanks to everyone who reported issues.
Version 3.3.4 – Bug fixes and Minor Enhancements
This update contains a number of bug fixes and minor enhancements. It is recommended for all users.
For details, please refer to the Release Notes for Version 3.3.4..
Thanks to everyone who reported issues.
Version 3.3. Audio Improvements, MQTT, Jack Audio, Stability Improvements, Bug Fixes and Enhancements.
New Feature Highlights:
- Automatic Format and Speed Selection for
alsa
devices. Using thealsa
back end, when you specify the output device, Shairport Sync will now, by default, select the best output format and speed. For instance, if your output device is capable of 32-bit operation, it will be selected. In some situations, this will give a noticeable improvement in sound quality – see the discussion of audio improvements below. The greatest bit depth will always be selected, and the lowest speed that is a multiple of 44,100. - Audio Transient Reduction: A
Disable Standby
feature to eliminate certain faint-but-annoying audible pops and clicks has been added foralsa
devices. The setting prevents an output device entering standby mode and thus minimises standby/busy transitions, which can sometimes be heard. It is pretty impressive, especially combined with fixes to the dithering code described below. If you can enable 24- or 32-bit audio output to your output device, you can get even better results. This feature is available in the ALSA back end (standard in Linux) when it is driving output devices that can provide precision delay information, i.e. most hardware output devices and possibly some virtual devices. - New active/inactive program hooks. Basically, these are "deglitched" replacements for play start/play end program hooks. When a play session starts, the system goes active. When the play session ends, the system remains active for a period determined by the
active_state_timeout
setting, 10 seconds by default. If another play session starts before the period elapses, the system stays active; otherwise the system goes inactive. The hooks are performed when the system goes active or inactive. - A new MQTT client interface, with support for metadata and for some remote control commands.
- A new Jack Audio back end.
- PulseAudio: A new option for the
pa
backend to allow the specification of the audio sink. - CYGWIN: An updated and enhanced installation procedure to install Shairport Sync as a Cygwin service.
- Opt-in default for certain added features: If support for
soxr
, metadata or the Apple ALAC decoder is included during building (i.e. at the./configure
stage), then the features are enabled by default at run time. The features are (1)soxr
interpolation – chosen automatically if the device is fast enough, (2) the Apple ALAC decoder and (3) metadata, which is implied when you include support for metadata, D-Bus, MPRIS or MQTT features. - Shairport Sync can now receive AirPlay streams consisting of raw PCM – 16 bit stereo frames at 44,100 samples per second. Packets must be 352 frames exactly.
- Improved support for big-endian CPUs by adding support for explicit -endian formats, i.e. S16_LE, S16_BE, S24_LE, S24_BE, S32_LE, S32_BE.
- Add a list of
alsa
hardware devices found to the alsa backend help section in theshairport-sync -h
text. (Linux only – doesn't work on FreeBSD/OpenBSD.)
Stability Improvement Highlights:
- Greatly improved stability when playing is interrupted by another play request, by the abrupt disappearance of the audio source or by severe network problems.
- Enhanced detection of unrecoverable device or player errors. A hook is provided to call an external program when there errors are detected.
- Improved robustness when severe transient network problems occur.
More Details
New Features
- A new Jack Audio back end. The rough back end for Jack Audio present in earlier development builds has been extensively rewritten by Jörn Nettingsmeier in a way that is more in keeping with the Jack Audio style. It uses native Jack Audio lockless buffers and offers autoconnect facilities that the previous version didn't have. Many thanks to him.
- A new MQTT client interface, with support for metadata and for some remote control commands, is a new configuration option, thanks to the work of Till Zimmermann. MQTT is an often-used protocol in FOSS home-automation projects (as well as in commercial ones), and as Shairport Sync is often used in these setups, this adds client support for this protocol.
- The volume-control software has been completely rewritten. From a user's point of view, the result should be a much smoother response to volume control changes, free from artefacts. It is now also possible to combine the hardware mixer and the software attenuator in two ways to extend the attenuation range -- giving priority to the software mixer or giving priority to the hardware mixer. see the new
volume_range_combined_hardware_priority
setting in thegeneral
section of the configuration file. - The muting/unmuting code has been rewritten to be simpler and more consistent.
- Two new external program/script hooks –
run_this_before_entering_active_state
andrun_this_after_exiting_active_state
are provided for when the system goes active or inactive. Background: Many users use therun_this_before_play_begins
program hook to turn on an amplifier and therun_this_after_play_ends
hook to turn it off. A big problem is when another play session starts immediately after a play session ends, causing the amplifier to be switched off and then on again very quickly. This happens, for example, when a YouTube clip ends and the next one begins. To get around this, the concept of an active state covering a sequence of play sessions is introduced. When a play session starts, the system goes active -- it enters the active state. When the play session ends, the system remains active for a period determined by theactive_state_timeout
setting, 10 seconds by default. If another play session starts before the period elapses, the system stays active; otherwise the system goes inactive -- it leaves the active state. The two new hooks mentioned above can be used to execute programs/scripts when the system goes active or inactive. They are to be found thesessioncontrol
group of settings. - A new command-line option,
-u
, directs logging toSTDERR
rather than the system log. Useful when you compile Shairport Sync withoutlibdaemon
using the--without-libdaemon
configuration option. - A new feature called
Disable Standby
keeps the output DAC in the play state all the time and helps to remove some annoying popping or clicking noises. This is an attempt to remove the annoying low-level clicking sounds that some output devices make just when they start processing audio and sometimes when they stop. Typically a faint click might be heard just before a play session starts or just before audio resumes after a pause. Similarly, a faint click can sometimes be heard just after a play session ends. It is extremely difficult to remove these clicks completely from the hardware, so this new feature ensures that the output device avoids situations where these clicks might be generated by always playing audio. To accomplish this, if Shairport Sync isn't actually playing anything, audio frames consisting of silence are sent to the output device, keeping it playing. Apart from the initial startup transition, the output device never stops playing and thus never transitions to and from standby mode, avoiding the possibility of generating associated audio disturbances. To enable this feature, a newalsa
group setting with the namedisable_standby_mode
is available. (If you do a full$ sudo make install
, a new sample configuration file with this setting in it is installed at/etc/shairport-sync.conf.sample
or/usr/local/etc/shairport-sync.conf.sample
.) To control this feature, a newalsa
-onlydisable_standby_mode
setting can be set toalways
,auto
ornever
. Thealways
setting is recommended for systems where the output device is dedicated to Shairport Sync. The "Disable Standby" state itself can be set or cleared via the D-Bus interfaceDisableStandby
property. - A new
run_this_if_an_unfixable_error_is_detected
(in thesessioncontrol
group of settings) program hook is provided. At the moment, two conditions can trigger this. The first is if the watchdog is unable to terminate a play session. The second is if the output device stalls for a long period. Both conditions can be caused by malfunctioning DACs. The external program could, for example, reboot the device. - Add a configuration option to specify the PulseAudio output sink. An extra option for the
pa
backend to allow the specification of the audio sink. Thanks to Maciej Wilczyński for his work on this.
Enhancements
- In the
alsa
backend, newplay()
anddelay()
functions minimise the use ofsnd_pcm_recover()
to prevent unnecessary resets of the output DACs. - In the
alsa
backend driver, hardware isn't accessed until the first time it is needed. That is, when Shairport Sync starts up, it no longer needs to access the device momentarily. Instead, it waits for the first use. - The
libdaemon
library is now an optional build. It is not necessary forsystemd
systems and can be omitted. Use the--without-libdaemon
configuration option to leave it out. Note that whenlibdaemon
is omitted, log messages will be sent to the system log by default. Use the-u
command line command to direct log messages toSTDERR
, which is typically the command line console. - At present, Shairport Sync adds dither to the audio (a) if the built-in software-based volume control is used, (b) if the audio is mixed to mono or (3) if there is a reduction in sample size, say from 16- to 8-bit. The code for generating dither has been much improved. Due to a poor pseudo-random number arrangement, the dither noise didn't sound like white noise -- now it does. In addition, if dither is to be added, it is also added to the silence inserted just p...
Version 3.2.2. Timing adjustments for iOS 12 and macOS Mojave. Minor bug fix.
Enhancements
- In this release, the latency calculations are updated to accommodate changes in iOS 12 and AirPlay connections from macOS Mojave. Thanks to artenverho who first reported the issue.
- Formatting of the settings file
shairport-sync.conf
has been fixed, thanks to the work of roblan.
Bug Fix
- A problem that prevented the
run_this_when_volume_is_set
script or program from running when the volume control is changed has been fixed. Thanks to shaven for the report.