Bring some changes in from V5.0 release. Start using 'post-dev' to avoid ambiguity.

This commit is contained in:
Mike Brady
2026-02-14 12:23:46 +00:00
11 changed files with 295 additions and 96 deletions
+17 -29
View File
@@ -3,16 +3,9 @@
# Tag pattern # Tag pattern
# 'master' - rolling, rolling-classic # 'master' - rolling, rolling-classic
# 'development' - development, development-classic # 'development' - development, development-classic
# When a tag is created. # When a tag is created.
# Tag pattern: '[tag]' & '[tag]-classic' # Tag pattern: '[tag]' & '[tag]-classic', plus 'latest' & 'classic'
# TODO: Does not currently push 'latest' or 'classic' tags.
# Builds but does not push a docker image for PRs.
name: Build and conditionally push docker image name: Build and conditionally push docker image
on: on:
workflow_dispatch: workflow_dispatch:
push: push:
@@ -23,32 +16,26 @@ on:
- "*" - "*"
pull_request: pull_request:
types: [opened, synchronize, reopened, ready_for_review] types: [opened, synchronize, reopened, ready_for_review]
jobs: jobs:
docker-vars: docker-vars:
uses: ./.github/workflows/docker-vars.yaml uses: ./.github/workflows/docker-vars.yaml
build-docker-image-and-publish: build-docker-image-and-publish:
name: Build and conditionally push docker image name: Build and conditionally push docker image
needs: needs:
- docker-vars - docker-vars
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
strategy: strategy:
matrix: matrix:
include: include:
- name: classic - name: classic
dockerfile: ./docker/classic/Dockerfile dockerfile: ./docker/classic/Dockerfile
tag_suffix: -classic
build_args: | build_args: |
SHAIRPORT_SYNC_BRANCH=. SHAIRPORT_SYNC_BRANCH=.
- name: main - name: main
dockerfile: ./docker/Dockerfile dockerfile: ./docker/Dockerfile
tag_suffix: ""
build_args: | build_args: |
SHAIRPORT_SYNC_BRANCH=. SHAIRPORT_SYNC_BRANCH=.
NQPTP_BRANCH=${{ needs.docker-vars.outputs.nqptp_branch }} NQPTP_BRANCH=${{ needs.docker-vars.outputs.nqptp_branch }}
steps: steps:
- name: Login to Docker Registry - name: Login to Docker Registry
uses: docker/login-action@v3.7.0 uses: docker/login-action@v3.7.0
@@ -57,18 +44,14 @@ jobs:
username: ${{ secrets.DOCKER_REGISTRY_USER }} username: ${{ secrets.DOCKER_REGISTRY_USER }}
password: ${{ secrets.DOCKER_REGISTRY_TOKEN }} password: ${{ secrets.DOCKER_REGISTRY_TOKEN }}
if: needs.docker-vars.outputs.push_docker_image == 'true' if: needs.docker-vars.outputs.push_docker_image == 'true'
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3.7.0 uses: docker/setup-qemu-action@v3.7.0
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.12.0 uses: docker/setup-buildx-action@v3.12.0
- name: Checkout shairport sync repo - name: Checkout shairport sync repo
uses: actions/checkout@v6.0.2 uses: actions/checkout@v6.0.2
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Build and push ${{ matrix.name }} - name: Build and push ${{ matrix.name }}
uses: docker/build-push-action@v6.18.0 uses: docker/build-push-action@v6.18.0
env: env:
@@ -80,16 +63,21 @@ jobs:
push: ${{ needs.docker-vars.outputs.push_docker_image == 'true' }} push: ${{ needs.docker-vars.outputs.push_docker_image == 'true' }}
# Assign tags based on branch or tag type for clarity # Assign tags based on branch or tag type for clarity
tags: | tags: |
${{ github.ref_type == 'branch' && github.ref_name == 'development' ${{ github.ref_type == 'branch' && github.ref_name == 'development' && matrix.name == 'main'
&& format('{0}:development{1}', env.registry_and_name, matrix.tag_suffix) || '' }} && format('{0}:development', env.registry_and_name) || '' }}
${{ github.ref_type == 'branch' && github.ref_name == 'development' && matrix.name == 'classic'
${{ github.ref_type == 'branch' && github.ref_name == 'master' && format('{0}:development-classic', env.registry_and_name) || '' }}
&& format('{0}:rolling{1}', env.registry_and_name, matrix.tag_suffix) || '' }} ${{ github.ref_type == 'branch' && github.ref_name == 'master' && matrix.name == 'main'
&& format('{0}:rolling', env.registry_and_name) || '' }}
${{ github.ref_type == 'tag' ${{ github.ref_type == 'branch' && github.ref_name == 'master' && matrix.name == 'classic'
&& format('{0}:{1}{2}', env.registry_and_name, github.ref_name, matrix.tag_suffix) || '' }} && format('{0}:rolling-classic', env.registry_and_name) || '' }}
${{ github.ref_type == 'tag' && matrix.name == 'main'
&& format('{0}:{1}', env.registry_and_name, github.ref_name) || '' }}
${{ github.ref_type == 'tag' && matrix.name == 'classic'
&& format('{0}:{1}-classic', env.registry_and_name, github.ref_name) || '' }}
${{ github.ref_type == 'tag' && matrix.name == 'main'
&& format('{0}:latest', env.registry_and_name) || '' }}
${{ github.ref_type == 'tag' && matrix.name == 'classic'
&& format('{0}:classic', env.registry_and_name) || '' }}
build-args: | build-args: |
${{ matrix.build_args }} ${{ matrix.build_args }}
# TODO: Fix pushing of 'latest' and 'classic' tags.
# env.is_tag == 'true' && env.branch_name == 'master' && format('{0}:latest{1}', env.registry_and_name, matrix.tag_suffix) || ''
+2
View File
@@ -1,3 +1,5 @@
name: Set variables for a Docker build (used by another workflow).
on: on:
workflow_call: workflow_call:
outputs: outputs:
+1 -1
View File
@@ -68,7 +68,7 @@ Here are some guidelines:
* Ports 319 and 320 must be free to use (i.e. they must not be in use by another service such as a PTP service) and must not be blocked by a firewall. * Ports 319 and 320 must be free to use (i.e. they must not be in use by another service such as a PTP service) and must not be blocked by a firewall.
* An up-to-date Linux, FreeBSD or OpenBSD system. This is important, as some of the libraries must be the latest available. * An up-to-date Linux, FreeBSD or OpenBSD system. This is important, as some of the libraries must be the latest available.
* Due to realtime timing requirements, Shairport Sync does not work well on virtual machines outputting to ALSA, PipeWire, PulseAudio or Jack Audio. For the same reason, Shairport Sync does not work very well with with Bluetooth. YMMV of course, and you can have success where timing is not crucial, such as outputting to `stdout` or to a unix pipe. * Due to realtime timing requirements, Shairport Sync does not work well on virtual machines outputting to ALSA, PipeWire or PulseAudio. For the same reason, Shairport Sync does not work very well with with Bluetooth. YMMV of course, and you can have success where timing is not crucial, such as outputting to `stdout` or to a unix pipe.
* Shairport Sync can not run in AirPlay 2 mode on a Mac because NQPTP, on which it relies, needs ports 319 and 320, which are already used by macOS. * Shairport Sync can not run in AirPlay 2 mode on a Mac because NQPTP, on which it relies, needs ports 319 and 320, which are already used by macOS.
* A version of the [FFmpeg](https://www.ffmpeg.org) library with an AAC decoder capable of decoding Floating Planar -- `fltp` -- material must be in your system. There is a guide [here](TROUBLESHOOTING.md#aac-decoder-issues-airplay-2-only) to help you find out if your system has it. * A version of the [FFmpeg](https://www.ffmpeg.org) library with an AAC decoder capable of decoding Floating Planar -- `fltp` -- material must be in your system. There is a guide [here](TROUBLESHOOTING.md#aac-decoder-issues-airplay-2-only) to help you find out if your system has it.
* An audio output. For preference, the output device should be capable of accepting stereo or multichannel at 44,100 and 48,000 frames per second. With FFmpeg support, audio will be transcoded and mixed to match output device capabilities as necessary. * An audio output. For preference, the output device should be capable of accepting stereo or multichannel at 44,100 and 48,000 frames per second. With FFmpeg support, audio will be transcoded and mixed to match output device capabilities as necessary.
+20 -4
View File
@@ -1,6 +1,23 @@
# Build and Install Shairport Sync # Build and Install Shairport Sync
This guide is for a basic installation of Shairport Sync in a recent (2018 onwards) Linux or FreeBSD. This guide is for a basic installation of Shairport Sync in a recent (2018 onwards) Linux or FreeBSD.
## Important Note -- Upgrading to Version 5!
If you have been using Shairport Sync prior to Version 5.0 and are rebuilding or reinstalling Shairport Sync, be aware that a few important things have changed.
While the overall operation of Shairport Sync has not changed much, it is really important to fully remove existing startup scripts and to check and update configuration files. Some important changes are highlighted here:
1. The default sample rate has changed from 44,100 to 48,000 for buffered audio. Real-time audio streams remain at 44,100.
2. Shairport Sync will also play surround sound (5.1 and 7.1) and lossless (48k) audio.
3. Shairport Sync will automatically switch output rates and formats to correspond to input rates and formats. This can be controlled.
4. Many build flags have changed: for example `--with-systemd` is now `with-systemd-startup`.
5. Many configuration settings names and facilities have changed. For example `convolution` is now `convolution_enabled`. Another example is that convolution is now multi-threaded, so a new `convolution_thread_pool_size` setting is available.
7. Installation has changed: when Shairport Sync and NQPTP are installed, their startup scripts have changed to provide them with more suitable privileges. You must remove any existing startup scripts.
8. Jack Audio is deprecated and will be removed in a future update. Consider using PipeWire instead.
A useful guide to Version 5 Configuration File Changes in Version 5 is available [here](CONFIGURATIONFILECHANGES5.md).
## 0. General
Shairport Sync can be built as an AirPlay 2 player (with [some limitations](AIRPLAY2.md#features-and-limitations)) or as classic Shairport Sync – a player for the older, but still supported, "classic" AirPlay (aka "AirPlay 1") protocol. Check ["What You Need"](AIRPLAY2.md#what-you-need) for some basic system requirements. Shairport Sync can be built as an AirPlay 2 player (with [some limitations](AIRPLAY2.md#features-and-limitations)) or as classic Shairport Sync – a player for the older, but still supported, "classic" AirPlay (aka "AirPlay 1") protocol. Check ["What You Need"](AIRPLAY2.md#what-you-need) for some basic system requirements.
Note that Shairport Sync does not work well in virtual machines -- YMMV. Note that Shairport Sync does not work well in virtual machines -- YMMV.
@@ -66,8 +83,7 @@ If you are building classic Shairport Sync, the list of packages is shorter:
libpopt-dev libconfig-dev libasound2-dev avahi-daemon libavahi-client-dev libssl-dev libsoxr-dev \ libpopt-dev libconfig-dev libasound2-dev avahi-daemon libavahi-client-dev libssl-dev libsoxr-dev \
libavutil-dev libavcodec-dev libavformat-dev libavutil-dev libavcodec-dev libavformat-dev
``` ```
Building on Ubuntu 24.10 or Debian 13 ("Trixie") and later -- and possibly on other distributions -- requires `systemd-dev`. It does no harm to attempt to install it -- the install will simply fail if the package doesn't exist:
Building on Ubuntu 24.10 or Debian 13 ("Trixie") and later may require `systemd-dev`. It does no harm to attempt to install it -- the install will simply fail if the package doesn't exist:
``` ```
# apt install --no-install-recommends systemd-dev # it's okay if this fails because the package doesn't exist # apt install --no-install-recommends systemd-dev # it's okay if this fails because the package doesn't exist
``` ```
@@ -255,7 +271,7 @@ If your system is _not_ using PipeWire or PulseAudio (see [above](#checking-for-
### Power Saving ### Power Saving
If your computer has an `Automatic Suspend` Power Saving Option, you should experiment with disabling it, because your computer has to be available for AirPlay service at all times. If your computer has an `Automatic Suspend` Power Saving Option, you should experiment with disabling it, because your computer has to be available for AirPlay service at all times.
### WiFi Power Management – Linux ### WiFi Power Management – Linux
If you are using WiFi, you should turn off WiFi Power Management: If you are using WiFi, you should turn off WiFi Power Management. On a Raspberry Pi, for example, you can use the following commands:
``` ```
# iwconfig wlan0 power off # iwconfig wlan0 power off
``` ```
@@ -276,7 +292,7 @@ With AirPlay 2, you can follow the steps in [ADDINGTOHOME.md](ADDINGTOHOME.md) t
At this point, you should have a basic functioning Shairport Sync installation. If you want more control – for example, using the ALSA backend, if you want to use a specific DAC, or if you want AirPlay to control the DAC's volume control – you can use settings in the configuration file or you can use command-line options. At this point, you should have a basic functioning Shairport Sync installation. If you want more control – for example, using the ALSA backend, if you want to use a specific DAC, or if you want AirPlay to control the DAC's volume control – you can use settings in the configuration file or you can use command-line options.
#### Configuration File #### Configuration Sample File
When you run `# make install`, a configuration file is installed if one doesn't already exist. Additionally, a sample configuration file called `shairport-sync.conf.sample` is _always_ installed. This contains all the setting groups and all the settings available, commented out so that default values are used. The file contains explanations of the settings, useful hints and suggestions. The configuration file and the sample configuration file are installed in the `sysconfdir` you specified at the `./configure...` step above. When you run `# make install`, a configuration file is installed if one doesn't already exist. Additionally, a sample configuration file called `shairport-sync.conf.sample` is _always_ installed. This contains all the setting groups and all the settings available, commented out so that default values are used. The file contains explanations of the settings, useful hints and suggestions. The configuration file and the sample configuration file are installed in the `sysconfdir` you specified at the `./configure...` step above.
Please take a look at [Advanced Topics](ADVANCED%20TOPICS/README.md) for some ideas about what else you can do to enhance the operation of Shairport Sync. For example, you can adjust synchronisation to compensate for delays in your system. Please take a look at [Advanced Topics](ADVANCED%20TOPICS/README.md) for some ideas about what else you can do to enhance the operation of Shairport Sync. For example, you can adjust synchronisation to compensate for delays in your system.
+1 -1
View File
@@ -113,7 +113,7 @@ A [daemon](https://en.wikipedia.org/wiki/Daemon_(computing)) is a computer progr
FreeBSD and most recent Linux distributions can run an application as a daemon without special modifications. However, in certain older distributions and in special cases it may be necessary to enable Shairport Sync to daemonise itself. Use the `--with-libdaemon` configuration option: FreeBSD and most recent Linux distributions can run an application as a daemon without special modifications. However, in certain older distributions and in special cases it may be necessary to enable Shairport Sync to daemonise itself. Use the `--with-libdaemon` configuration option:
- `--with-libdaemon` Includes a demonising library needed if you want Shairport Sync to demonise itself with the `-d` option. Not needed for `systemd`-based systems which demonise programs differently. - `--with-libdaemon` Includes a demonising library needed if you want Shairport Sync to demonise itself with the `-d` option. Not needed for `systemd`-based systems which demonise programs differently.
- `--with-piddir=<pathname>` Specifies a pathname to a directory in which to write the PID file which is created when Shairport Sync daemonises itself and used to locate the deamon process to be killed with the `-k` command line option. - `--with-piddir=<pathname>` Specifies a pathname to a directory in which to write the PID file which is created when Shairport Sync daemonises itself and used to locate the daemon process to be killed with the `-k` command line option.
### Automatic Start ### Automatic Start
| Flags | | Flags |
+154
View File
@@ -0,0 +1,154 @@
# Configuration File Changes in Version 5.0
This document summarizes the important changes to the `shairport-sync.conf` configuration file for normal users upgrading to Version 5.0.
## Multi-Channel Audio Support (NEW!)
Version 5.0 adds support for multi-channel audio (up to 8 channels), including surround sound formats like 5.1 and 7.1.
**New Settings in `general` section (showing defaults):**
* `eight_channel_mode = "on"` - Enable 8-channel (7.1 surround) audio reception.
* `six_channel_mode = "on"` - Enable 6-channel (5.1 surround) audio reception.
* `mixdown = "auto"` - Control how multi-channel audio is mixed down to fewer channels.
* `output_channel_mapping = "auto"` - Control how audio channels map to your output device.
**What this means for you:** If you have a surround sound system, you can now receive and play multi-channel audio directly. Most users can leave these at their defaults.
## Audio Format and Rate Settings
**Enhanced Interpolation Options:**
The `interpolation` setting now supports a new `"vernier"` mode especially intended for low-power devices:
* `"auto"` (default, recommended) - Automatically chooses the best method for your processor.
* `"vernier"` (new!) - Optimized for low-power devices like Raspberry Pi.
* `"soxr"` - High quality, needs fast processor.
* `"basic"` - No longer recommended.
**New FFmpeg Decoder:**
The `alac_decoder` setting has changed:
* Default is now `"ffmpeg"` (if built with FFmpeg support).
* Old `"hammerton"` and `"apple"` decoders are deprecated for security reasons.
**New Buffer Setting:**
* `audio_decoded_buffer_desired_length_in_seconds = 1.0` - (Advanced.) Controls the internal audio buffer size (AirPlay 2 only).
## Backend-Specific Changes
### ALSA Backend
**New format/rate/channel settings** - You can now specify multiple options and let Shairport Sync auto-select:
* `output_rate = "auto"` - Can be "auto", a single rate like `48000`, or a list like `(44100, 48000)`.
* `output_format = "auto"` - Can be "auto", a format like `"S32_LE"`, or a list.
* `output_channels = "auto"` - Can be "auto", a number like `2`, or a list like `(2, 6, 8)`.
**What this means:** Shairport Sync can now automatically switch between different audio formats and rates to match your source, or you can lock it to specific settings.
**Other ALSA changes:**
* `use_mmap_if_available` default changed from `"yes"` to `"no"`.
* `disable_standby_mode_silence_scan_interval` default changed from `0.004` to `0.030`.
* New: `disable_standby_mode_default_channels = 2` - Initial channel setting when standby mode is disabled.
* New: `disable_standby_mode_default_rate` - Initial sample rate when standby mode is disabled.
### PipeWire Backend
**Renamed section:** The `pw` section is now called `pipewire`.
**New settings:**
* `output_rate = "auto"`.
* `output_format = "auto"`.
* `output_channels = "auto"`.
**What this means:** PipeWire now has the same flexible format/rate/channel options as ALSA.
### PulseAudio Backend
**Renamed section:** The `pa` section is now called `pulseaudio`.
**New settings:**
* `output_rate = "auto"`.
* `output_format = "auto"`.
* `output_channels = "auto"`.
* `default_channel_layouts = "alsa"` - Use ALSA-compatible channel layouts (default) or PulseAudio's own layouts.
### Other Backends
`sndio`, `pipe`, `stdout`, and `ao` backends have all gained the new `output_rate`, `output_format`, and `output_channels` settings with similar functionality.
## DSP (Convolution and Loudness) Changes
**Convolution Filter:**
Settings have been renamed for clarity:
* `convolution` → `convolution_enabled`.
* `convolution_ir_file` → `convolution_ir_files`.
* `convolution_max_length` → `convolution_max_length_in_seconds`.
**New convolution setting:**
* `convolution_thread_pool_size = 1` - Number of CPU threads for convolution processing.
**What this means:**
- You can now specify multiple impulse response files for different sample rates.
- The convolution filter works with both stereo and multi-channel audio.
- You can use multiple CPU cores for faster processing (but core management by the OS may cause power supply noise on some systems).
**Loudness Filter:**
* `loudness` → `loudness_enabled`.
* The loudness filter now works with stereo and multi-channel audio at both 44.1k and 48k.
## MQTT Changes
**New setting:**
* `publish_retain = "no"` - Set to `"yes"` to make the MQTT broker store the last message for each topic.
**What this means:** When enabled, new MQTT subscribers will immediately receive the most recent values instead of having to wait for the next update.
## Session Control Changes
**Default timeout changed:**
* `session_timeout` default changed from `120` seconds to `60` seconds.
**What this means:** Shairport Sync will now become available again 60 seconds (instead of 120) after a source disappears.
## Removed Settings
The following old settings have been removed:
* `resync_recovery_time_in_seconds` - No longer needed with improved synchronization.
## What Should You Do?
**For most users:** Your existing configuration file will continue to work, though you might have to make some minimal changes.
**Must Do**
* If you use PipeWire or PulseAudio, please change over to the new configuration file settings and backend names immediately.
**Should Do**
* If you are using ALSA plugins, e.g. `plughw:1` to transcode from 44.1k to 48k, consider outputing directly to the underlying hardware device -- `hw:1` in this example -- allowing Shairport Sync to transcode if needed.
**If you want to use new features:**
1. **Multi-channel audio:** Leave `eight_channel_mode` and `six_channel_mode` settings at default, or set them to `"on"` if you have a surround sound system.
2. **Better performance on low-power devices:** Leave the `interpolation` setting at default, or set it to `"vernier"`.
3. **MQTT retain:** Set `publish_retain = "yes"` if you want MQTT clients to receive the last known state immediately.
4. **Convolution improvements:** Update your `convolution_ir_file` to `convolution_ir_files` and add multiple impulse response files for different sample rates.
5. **Backend-specific formats:** Specify exact rates/formats/channels if you want to lock Shairport Sync to specific settings, or use "auto" to let it adapt.
**To prepare for the future:** Consider updating deprecated setting names to their new equivalents:
- `convolution` → `convolution_enabled`.
- `convolution_ir_file` → `convolution_ir_files`.
- `convolution_max_length` → `convolution_max_length_in_seconds`.
- `loudness` → `loudness_enabled`.
-6
View File
@@ -1,6 +0,0 @@
Making Pull Requests
====
If you would like to make pull requests (PRs) to Shairport Sync, please base them on the `development` branch.
Changes and additions in the `development` branch make their way eventually to the `master` branch.
+4 -1
View File
@@ -3,11 +3,14 @@ Shairport Sync is an [AirPlay](https://www.pocket-lint.com/speakers/news/apple/1
Shairport Sync can be built as an AirPlay 2 player (with [some limitations](AIRPLAY2.md#features-and-limitations)) or as "classic" Shairport Sync – a player for the older, but still supported, AirPlay (aka "AirPlay 1") protocol. Shairport Sync can be built as an AirPlay 2 player (with [some limitations](AIRPLAY2.md#features-and-limitations)) or as "classic" Shairport Sync – a player for the older, but still supported, AirPlay (aka "AirPlay 1") protocol.
When built for AirPlay 2, Shairport Sync can play stereo and multichannel (5.1 and 7.1) audio, including lossless 24-bit stereo at 48,000 frames per second.
Metadata such as artist information and cover art can be requested and provided to other applications. Shairport Sync can interface with other applications through MQTT, an MPRIS-like interface and D-Bus. Metadata such as artist information and cover art can be requested and provided to other applications. Shairport Sync can interface with other applications through MQTT, an MPRIS-like interface and D-Bus.
Shairport Sync does not support AirPlay video or photo streaming. Shairport Sync does not support AirPlay video or photo streaming.
# Quick Start # Quick Start
* If you are updating from a previous version of Shairport Sync, please visit the [release notes](RELEASENOTES.md) for possible breaking changes.
* A building guide is available [here](BUILD.md). * A building guide is available [here](BUILD.md).
* A Docker image is available on the [Docker Hub](https://hub.docker.com/r/mikebrady/shairport-sync). Also see [docker/README.md](docker/README.md). * A Docker image is available on the [Docker Hub](https://hub.docker.com/r/mikebrady/shairport-sync). Also see [docker/README.md](docker/README.md).
* Next Steps and Advanced Topics are [here](ADVANCED%20TOPICS/README.md). * Next Steps and Advanced Topics are [here](ADVANCED%20TOPICS/README.md).
@@ -17,7 +20,7 @@ Shairport Sync does not support AirPlay video or photo streaming.
* Some advanced topics and developed in [ADVANCED TOPICS](https://github.com/mikebrady/shairport-sync/tree/master/ADVANCED%20TOPICS). * Some advanced topics and developed in [ADVANCED TOPICS](https://github.com/mikebrady/shairport-sync/tree/master/ADVANCED%20TOPICS).
# Features # Features
* Outputs AirPlay audio to [ALSA](https://www.alsa-project.org/wiki/Main_Page), [sndio](http://www.sndio.org), [PipeWire](https://pipewire.org), [PulseAudio](https://www.freedesktop.org/wiki/Software/PulseAudio/), [Jack Audio](http://jackaudio.org), to a unix pipe or to `STDOUT`. It also has limited support for [libao](https://xiph.org/ao/). * Outputs AirPlay audio to [ALSA](https://www.alsa-project.org/wiki/Main_Page), [sndio](http://www.sndio.org), [PipeWire](https://pipewire.org), [PulseAudio](https://www.freedesktop.org/wiki/Software/PulseAudio/), to a unix pipe or to `STDOUT`. It also has limited support for [libao](https://xiph.org/ao/).
* Metadata — Shairport Sync can deliver metadata supplied by the source, such as Album Name, Artist Name, Cover Art, etc. through a pipe or UDP socket to a recipient application program — see https://github.com/mikebrady/shairport-sync-metadata-reader for a sample recipient. Sources that supply metadata include iTunes and the Music app in macOS and iOS. * Metadata — Shairport Sync can deliver metadata supplied by the source, such as Album Name, Artist Name, Cover Art, etc. through a pipe or UDP socket to a recipient application program — see https://github.com/mikebrady/shairport-sync-metadata-reader for a sample recipient. Sources that supply metadata include iTunes and the Music app in macOS and iOS.
* An interface to [MQTT](https://en.wikipedia.org/wiki/MQTT), a popular protocol for Inter Process Communication, Machine-to-Machine, Internet of Things and Home Automation projects. The interface provides access to metadata and artwork, and has limited remote control. * An interface to [MQTT](https://en.wikipedia.org/wiki/MQTT), a popular protocol for Inter Process Communication, Machine-to-Machine, Internet of Things and Home Automation projects. The interface provides access to metadata and artwork, and has limited remote control.
* Digital Signal Processing facilities – please see the [DSP Wiki Page Guide](https://github.com/mikebrady/shairport-sync/wiki/Digital-Signal-Processing-with-Shairport-Sync). (Thanks to [Yann Pomarède](https://github.com/yannpom) for the code and to [Paul Wieland](https://github.com/PaulWieland) for the guide.) * Digital Signal Processing facilities – please see the [DSP Wiki Page Guide](https://github.com/mikebrady/shairport-sync/wiki/Digital-Signal-Processing-with-Shairport-Sync). (Thanks to [Yann Pomarède](https://github.com/yannpom) for the code and to [Paul Wieland](https://github.com/PaulWieland) for the guide.)
+94 -2
View File
@@ -1,6 +1,98 @@
Minor Release Notes Version 5.0
==== ====
Minor release notes are attached to the releases themselves. This major release represents a significant advancement in Shairport Sync's capabilities, introducing multi-channel audio support, high-resolution playback, and comprehensive performance improvements.
**Important Breaking Changes Notice:** Version 5.0 includes many breaking changes from previous versions of Shairport Sync. Please review the documentation carefully before upgrading. A useful guide to Version 5 Configuration File Changes in Version 5 is available [here](CONFIGURATIONFILECHANGES5.md).
**New Features**
* **Multi-Channel and High-Resolution Audio Support**
* 48,000 frames per second ("48k") operation.
* 48k lossless stereo support.
* 5.1 and 7.1 surround sound support.
* Multi-channel and multi-rate operation on `ALSA`, PipeWire, PulseAudio, FreeBSD, `stdout` and Unix `pipe` output backends.
* **Automatic Audio Format Selection**
* Flexible and controllable output format selection.
* Automatic rate, sample format, and channel count selection.
* **Full FFmpeg Integration**
* Support for transcoding.
* Advanced resampling capabilities.
* New audio format support.
* **Enhanced Resampling**
* New `vernier` resampling and interpolation method optimized for low-power CPUs.
* Better performance on resource-constrained devices.
* **Convolution and Loudness Enhancements**
* Convolution system is now multithreaded and works on stereo and multichannel audio at 48k and 44.1k.
* Multiple impulse response (IR) files can now be provided via `convolution_ir_files` setting.
* New `convolution_thread_pool_size` setting for multithreaded processing (defaults to 1).
* Loudness processing now works with stereo and multichannel audio at 48k and 44.1k.
* Updated to the most recent [HiFi-LoFi FFT convolver](https://github.com/HiFi-LoFi/FFTConvolver).
* **MQTT Enhancements**
* Added new `publish_retain` boolean option. When enabled, published MQTT messages have the `retain` flag set, so the MQTT broker stores the last message per topic and new subscribers receive the most recent value immediately. Thanks to [lululombard](https://github.com/lululombard) for [PR #2142](https://github.com/mikebrady/shairport-sync/pull/2142).
* **D-Bus Enhancements**
* Added new `dbus_default_message_bus` command-line argument (can be `system` or `session`) to set the default message bus for both D-Bus native service and MPRIS service.
**Performance Improvements**
* Better operation on low-power devices down to Raspberry Pi B.
* Improved efficiency on embedded systems.
* Enhanced timestamp handling for better synchronization.
* Improved sync error calculation.
* Rebuilt buffered audio processor for cleaner handling of immediate and deferred flush requests.
**Docker Enhancements**
* Reduced Docker image sizes with slimmed-down `FFmpeg` library.
* Removed `dhclient` from Docker images for smaller footprint.
**Bug Fixes**
* Fixed MQTT warning on service startup: "Could not establish a mqtt connection". The startup script now correctly states that the `mosquitto` service is required. Thanks to [Hugo Villeneuve](https://github.com/hvilleneuve29) for [PR #2137](https://github.com/mikebrady/shairport-sync/pull/2137).
* Fixed compatibility with `mbedtls` library version 3.4+ (present on recent Linux versions). Thanks to [Christian Beier](https://github.com/bk138) for [finding](https://github.com/mikebrady/shairport-sync/issues/2115) and [fixing](https://github.com/mikebrady/shairport-sync/pull/2118) the bug.
* Fixed PulseAudio backend so that `PA_ERR_NODATA` returns "No latency data yet". Thanks to [Vladimir Shakov](https://github.com/bogdad) for the [report and fix](https://github.com/mikebrady/shairport-sync/pull/2119).
* Ensured old flush requests are deleted when a new play session starts. Thanks to [saujanyashah](https://github.com/saujanyashah) for the [report](https://github.com/mikebrady/shairport-sync/issues/2107).
* Fixed format warnings on 64-bit and 32-bit systems
* Removed compilation warnings on 32-bit builds
* Improved argument checking for `debug()`, `inform()`, `warn()` and `die()` functions
* Fixed "daemon" typos throughout codebase. Thanks to [Chris Boot](https://github.com/bootc) for [PR #1981](https://github.com/mikebrady/shairport-sync/pull/1981).
* Added warning if a convolution impulse response file cannot be read due to bad path or permissions
**Build System Improvements**
* Unified service file with variable substitution for Avahi support, making it easier to add future service dependencies. Thanks to [Hugo Villeneuve](https://github.com/hvilleneuve29).
* Network interface selection now only considers interfaces that are up, running and not loopback interfaces. Thanks to [Carl Johnson](https://github.com/SoarVermont) for the [suggestion](https://github.com/mikebrady/shairport-sync/issues/1996).
**Configuration File Changes and Deprecations**
* New settings: `convolution_ir_files` (replaces `convolution_ir_file`), `convolution_enabled` (replaces `convolution`), `convolution_max_length_in_seconds` (replaces `convolution_max_length`), `loudness_enabled` (replaces `loudness`).
* New `convolution_thread_pool_size` setting (defaults to 1).
* Deprecated settings: `convolution_ir_file`, `convolution`, `convolution_max_length`, `loudness`.
* Corresponding D-Bus methods and properties have been updated.
**Deprecation Notice**
* The Jack Audio and `soundio` backends are deprecated and will be removed in a future release. Consider using the updated PipeWire backend instead.
**Documentation Updates**
* Updated BUILD.md with latest build instructions.
* Updated AIRPLAY2.md with feature information.
* Enhanced convolution and loudness documentation.
**Maintenance**
* Fixed FFmpeg deprecation warnings.
* Bumped `actions/checkout` from 6.0.1 to 6.0.2.
* Bumped `docker/login-action` from 3.6.0 to 3.7.0.
* Bumped `docker/build-push-action` from 6.13.0 to 6.15.0.
* Bumped `docker/setup-qemu-action` from 3.4.0 to 3.6.0.
* Bumped `docker/setup-buildx-action` from 3.9.0 to 3.10.0.
Version 4.3 -- Security Updates, Bug Fixes and Enhancements Version 4.3 -- Security Updates, Bug Fixes and Enhancements
==== ====
-50
View File
@@ -1,50 +0,0 @@
Reporting Issues and Making Pull Requests
====
Issue Reports
----
Issue reports are welcome, but before you report an issue, please have a look though the existing [issues](https://github.com/mikebrady/shairport-sync/issues), both open and closed, and check for hints in the [TROUBLESHOOTING](TROUBLESHOOTING.md) page.
It would be great to give some details of the device and version of Linux or FreeBSD in use along with the version of Shairport Sync you are using. Use:
```
$ shairport-sync -V
```
Then, if possible, some diagnostic information from the log or logfile would be useful.
If your system uses `systemd`, as most recent Linuxes do, try using:
```
$ sudo systemctl status shairport-sync
```
You might get something like this:
```
● shairport-sync.service - Shairport Sync - AirPlay Audio Receiver
Loaded: loaded (/lib/systemd/system/shairport-sync.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2019-11-29 08:52:47 GMT; 3s ago
Main PID: 19812 (shairport-sync)
Tasks: 10 (limit: 4915)
Memory: 2.0M
CGroup: /system.slice/shairport-sync.service
└─19812 /usr/local/bin/shairport-sync
```
If so, please paste it in as code (see below) the output into your message.
In general, a log verbosity of 2 is adequate (`-vv`, or the relevant entry in the configuration file), and it's usually helpful if statistics have been enabled (`--statistics` on the command line, or the relevant entry in the configuration file).
If you are pasting in code or a log file, format it as code by preceding it and following it with a line containing exactly three backquotes and nothing else ([see here](https://guides.github.com/features/mastering-markdown/) for more on formatting):
\`\`\`
```
code or log file entries
```
\`\`\`
Pull Requests
----
If you would like to contribute to the development of Shairport Sync, please make you changes to the `development` branch and make a pull request.
Changes and additions in the development branch make their way eventually to the `master` branch.
+1 -1
View File
@@ -1,7 +1,7 @@
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
AC_PREREQ([2.50]) AC_PREREQ([2.50])
AC_INIT([shairport-sync], [5.0-dev], [4265913+mikebrady@users.noreply.github.com]) AC_INIT([shairport-sync], [5.0-post-dev], [4265913+mikebrady@users.noreply.github.com])
: ${CFLAGS="-O3"} : ${CFLAGS="-O3"}
: ${CXXFLAGS="-O3"} : ${CXXFLAGS="-O3"}
AM_INIT_AUTOMAKE([subdir-objects]) AM_INIT_AUTOMAKE([subdir-objects])