Skip to content

Releases: mikebrady/shairport-sync

Really Big Update -- AirPlay 2!

28 Oct 15:38
Compare
Choose a tag to compare

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!

26 Oct 18:58
Compare
Choose a tag to compare
Pre-release

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 in libcrypto.
  • 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 and rolling tags like Ubuntu and use development 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

08 Dec 10:52
Compare
Choose a tag to compare

Version 3.3.9 is a single bug fix release.

Bug Fix

Details

Bug Fixes and Enhancements

26 Apr 10:35
c19f697
Compare
Choose a tag to compare

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 to NULL. 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

Version 3.3.7 – Bug Fixes, Enhancements and a New Feature

01 Dec 12:23
02cd3f8
Compare
Choose a tag to compare

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 new server entry to the pa 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

20 Feb 22:56
15fd1d0
Compare
Choose a tag to compare

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

Version 3.3.5 – Minor Bug Fixes and Enhancements to the D-Bus Interface

13 Nov 22:20
b1a5056
Compare
Choose a tag to compare

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

28 Oct 09:03
c8ea68b
Compare
Choose a tag to compare

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.

24 May 16:28
3c4a878
Compare
Choose a tag to compare

New Feature Highlights:

  • Automatic Format and Speed Selection for alsa devices. Using the alsa 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 for alsa 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 the shairport-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 the general 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 and run_this_after_exiting_active_state are provided for when the system goes active or inactive. Background: Many users use the run_this_before_play_begins program hook to turn on an amplifier and the run_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 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 -- 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 the sessioncontrol group of settings.
  • A new command-line option, -u, directs logging to STDERR rather than the system log. Useful when you compile Shairport Sync without libdaemon 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 new alsa group setting with the name disable_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 new alsa-only disable_standby_mode setting can be set to always, auto or never. The always 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 interface DisableStandby property.
  • A new run_this_if_an_unfixable_error_is_detected (in the sessioncontrol 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, new play() and delay() functions minimise the use of snd_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 for systemd systems and can be omitted. Use the --without-libdaemon configuration option to leave it out. Note that when libdaemon is omitted, log messages will be sent to the system log by default. Use the -u command line command to direct log messages to STDERR, 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...
Read more

Version 3.2.2. Timing adjustments for iOS 12 and macOS Mojave. Minor bug fix.

14 Oct 13:39
c9b5df2
Compare
Choose a tag to compare

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.