Commit Graph
686 Commits
Author SHA1 Message Date
Mike Brady 11052b7896 Lot of changes here.
1. check_classic_mac_basic.yml — update to latest macOS-latest
2. docker-on-push-tag-or-pr — dependant updates
3. FFTConvolver — fix a compilation warning when the DEBUG flag is turned off
4. Reorganise some source files — e.g. move most of the metadata stuff into a subdirectory
5. Remove unused special-purpose AirPlay 2 RC event handler.
6. Reorganise source files and source code relating to the standard event handler.
7. Check configuration settings a little more carefully to offer more meaningful diagnostics.
8. Add password to AirPlay 2 and reorganise initialisation to set AirPlay 2 flags accordingly.  Also, remove redundant airplay_pin.
9. Remove redundant debug facility definitions from common.h
10. Make it possible to omit all the dacp stuff from a build.
11. Make it possible to omit metadata multicast from a build.
12. Add AP2-native metadata by setting bit 50 of features to true.
13. Improve stability when pre-empting an existing play session.
14. Fix a few compiler warnings in the pair_ap library.
15. Ensure that the audio format is known before starting synchronisation.
16. Improve handle_configure to set/clear a new config setting. Doesn’t seem to do anything…
17. Experimentally turn off bit 46 of AirPlay 2 features — seems to stop failing pair-verify attempts.
2026-04-26 10:23:18 +01:00
Mike Brady 9dd303ef5d Quieten some more currently-irrelevant debug messages. 2026-03-07 12:25:28 +00:00
Mike Brady fb7de841b7 Silence some currently-irrelevant debug messages. 2026-03-02 19:00:31 +00:00
Mike Brady daa985e4e4 Turn off many currently-irrelevant debug messages by setting their level to 4, meaning they will never be displayed. 2026-03-01 13:43:11 +00:00
Mike Brady 525e49cd76 Fix one format warning 2025-12-31 19:52:44 +00:00
Mike Brady 16b6534ad3 further changes to remove compilation warnings on 32-bit builds 2025-12-31 19:02:16 +00:00
Mike Brady 3d148f026a Move to -Wformat=2 checking in Linux 2025-12-30 18:52:01 +00:00
Mike Brady 691d71f356 More fixes due to tightening the checks on debug/die/inform/warn varadic arguments. 2025-12-30 16:56:30 +00:00
Mike Brady 3aa34cd712 fix lots of errors calling debug() with incorrect argument patterns. 2025-12-30 14:59:27 +00:00
Mike Brady fcacc4e51f Update a couple of comments. 2025-12-22 17:55:26 +00:00
Mike Brady 3d4c0e1d6d Turn a rejection of an 8-byte ALAC packet into a debug message only. Maybe the 8-byte packet is okay. 2025-12-16 10:21:37 +00:00
Mike Brady 60278863ce Add some checks on cancelled deferred flushes and over-running immediate flushes. Quieten some other messages. 2025-12-15 12:50:10 +00:00
Mike Brady 07b60e7112 1. Add the ability to work back through queued buffers to find the first buffer that’s older than the given one. This is to enable the replacement of deciphered buffers with buffers that arrive later but are timed earlier.
Added functions that relate to this are: get_revised_seqno() to wind back through the queued buffers and clear_buffers_from() to free buffers that are already occupied.
2. Clean up get_audio_buffer_size_and_occupancy() and replace it with get_audio_buffer_occupancy().
3. Add a new general setting: audio_decoded_buffer_desired_length_in_seconds for managing the size of the player buffer queue when the source is buffered audio. Default is 0.75 seconds so that we can step back up to that time if older buffers appear.
2025-12-14 10:17:38 +00:00
Mike Brady ee56f778fd Remove redundant (?) calls to 'prepare_decoding_chain()'. 2025-12-11 16:44:16 +00:00
Mike Brady a755a26e92 Move clock setup and start from Setup Phase 1 to Setup Phase 2. clear_all_conns now clears every type of connection, not just airplay. Clean up, rename and remove some old stuff and quieten yet more debug messages. 2025-12-05 12:10:15 +00:00
Mike Brady a062f83abe Quieten lots of debug messages. 2025-12-05 08:49:22 +00:00
Mike Brady aac6913681 Stop the player thread from resetting the NTPTP client clock when it finishes. 2025-12-05 08:33:18 +00:00
Mike Brady 0e274eb760 Balking when connecting to HPM. 2025-12-04 11:35:00 +00:00
Mike Brady 3e57f8c706 Add a flag showing the event thread had exited. Modify the ab_mutex locking and unlocking. Add get_category_string(). 2025-12-03 15:54:01 +00:00
Mike Brady 54445ee8f5 Separate out the debug facilities into their own files. Clean up and add a few associated methods. 2025-11-27 12:37:16 +00:00
Mike Brady e12a3ed7b2 Do a long-overdue rebuild of the buffered audio processor and, with everything we have figured out, implement a cleaner method to handle both immediate and deferred flush requests. Remove lots of old flags and redundant code. Leave in a few debug messages. 2025-11-16 16:58:34 +00:00
Mike Brady d043f98330 Update the convolution code:
(1) to be multithreaded,
    (2) to work on multichannel audio and
    (3) to work on 48k and 44.1k audio.

    Allow multiple impulse response (IR) files with a new setting: "convolution_ir_files"
    When convolution starts, Shairport Sync will look for an IR file with a sample rate
    matching the input (44.1k or 48k) and channel count.
    If one can't be found, it will look for a single-channel IR file with the same rate.
    It will always choose the first match in the file list supplied "convolution_ir_files".

    Allow multithreading -- use the "convolution_thread_pool_size" to set the number of threads to use.

    Deprecate "convolution" -- use "convolution_enabled" instead.
    Deprecate "convolution_max_length" -- use "convolution_max_length_in_seconds" instead.
    Deprecate "convolution_ir_file" -- use "convolution_ir_files" instead.
    Update corresponding D-Bus methods and properties.

Update the loudness code to work on 48k and well as 44.1k audio and with multichannel audio.

    Deprecate "loudness" -- use "loudness_enabled" instead.
    Update corresponding D-Bus methods and properties.

Fix a deprecated FFmpeg warning.

Update HiFi-LoFi FFT convolver to latest available.
2025-10-13 13:26:20 +01:00
Mike Brady 82d873db11 Fix a bug whereby the volume setting was ignored if the input was not at 44100 FPS and the loudness DSP setting was enabled. 2025-07-17 12:01:02 +01:00
Mike Brady 60143518c2 This squashed commit comprises a long series of improvements, bug fixes, optimizations, and new feature additions:
- 48,000 frames per second operation,
 - 48k lossless stereo, 5.1 and 7.1 surround sound
 - Multichannel and multi rate operation on ALSA, PipeWire, PulseAudio, FreeBSD, stdout and unix pipe output backends.

Automatic, flexible and controllable output format (rate, sample format and channel count) selection.

Full FFmpeg integration to support transcoding, resampling, and new audio formats.

Better operation on lower powered devices down to e.g. Raspberry Pi B.

Reduced Docker image sizes with a slimmed-down FFmpeg library.

Enhanced timestamp handling for better synchronization.

Improved the sync error calculation.

A new "vernier" resampling and interpolation method for low-power CPUs.

Bug fixes and minor enhancements.

Note -- there are many breaking changes from previous versions of Shairport Sync!
2025-02-23 13:31:17 +00:00
Tucker Kern 17784945b5 Avoid use of stdbool 2024-09-16 21:19:56 +00:00
Tucker Kern 73a9177e01 Fix warnings when building without metadata 2024-09-13 13:41:51 -06:00
Tucker Kern feed0cb13f Send pvol metadata on mute 2024-09-13 19:10:56 +00:00
Mike Brady 67f422fb9d Add a new call to the backends -- prepare_to_play() -- to give them advance warning that audio will be coming soon. Sent when the first frame is received. 2024-08-08 16:09:26 +01:00
Mike Brady 597aba0ca6 Use an explicit 'is_running' flag in the sndio back end. Correct/improve some sndio documentation. 2024-07-22 10:28:30 +01:00
Mike Brady 105299a711 Remove watchdog stuff. Move the pthreadtestcancel into the loop inside buffergetframe() -- somethime the player can stay inside that loop indefinitely. 2024-06-29 20:06:27 +01:00
Mike BradyandGitHub 8d678c4313 Merge pull request #1846 from orangepizza/mbedtls3fix
Add support for mbedtls3. Many thanks!
2024-05-13 12:52:47 +01:00
Seo Suchan d73b585c6f mbedtls: add support to mbedtls3
Signed-off-by: Seo Suchan <tjtncks@gmail.com>
2024-05-09 21:51:38 +09:00
Mike Brady 626f986a18 Stop some warnings during build for Docker. 2023-10-23 11:41:20 +01:00
Mike Brady c36d322a91 Don't mute if the volume control is at minimum (-144.0) and ignore_volume_control is seelcted. 2023-09-29 09:41:07 +01:00
Mike Brady 2e023fb13b Remove a few debug messages. 2023-09-21 16:41:48 +01:00
Mike Brady 66163c1a71 Remove redundant (and now faulty) check to see if the player is also principal conn. 2023-09-21 16:34:40 +01:00
Mike Brady 986f9587de Rebuild the locking mechanisms for safe interruption of an existing play session. 2023-09-09 10:49:32 +01:00
dasl- ebe1ca17f2 rename to dasl_tapered 2023-07-13 21:43:25 -04:00
dasl- baf51cf2a7 Add logarithmic volume_control_profile mode 2023-07-02 09:27:53 -04:00
Mike Brady 01937965d7 quieten a few debug messages 2023-06-25 11:39:32 +01:00
Mike Brady 0ca5fd3caa Fix a statistics bug and also tidy up the statistics logging interval logic for resetting min and max counters. 2023-06-24 22:20:14 +01:00
Mike Brady 48b433ef93 minor corrections 2023-06-10 19:35:33 +01:00
Mike Brady 97dd0b1eac replace some deprecated OpenSSL calls 2023-06-10 16:25:03 +01:00
Mike Brady 6eb70eee70 Add modifications for V9 of the nqptp interface. 2023-01-19 14:32:32 +00:00
Mike Brady 72f1554cbb Continuing to check the high-volume limiter. Add configuration file settings for default and threshold volume settings and timeout. Include in diagnostics, set tentative defaults. 2023-01-19 12:44:26 +00:00
Mike Brady 8201903a4e Add code to try to save your ears by handling a situation where the player volume was set very high some time ago and you have forgotten.
In that situation currenctly, when you play something, it will come out at the last volume set on the device, which will be that very high volume.
This could happen, for example, the morning after a loud party :).

The new code works as follows: If nothing has been played for a period, say a few hours, and the volume is higher than a threshold, new connections that ask
for the current volume setting will be offered the default (low) volume rather than the current (very high) one.
Most players, including the HomePod mini, iOS and iPadOS use this to set their initial volume.
The Mac Music app retains its own setting, and the Mac System Sounds preference sometimes seems to take its setting from the Music app,
but at least you can see the settings they will apply.

Existing connections are unaffected, so this facility should be unobtrusive.
2023-01-18 10:41:50 +00:00
Mike Brady d2ca8c84a4 Clang format 2023-01-14 12:53:20 +00:00
Mike Brady 28f54af281 Add a new setting: resync_recovery_time to give the systems a little time to restart.
Clean up the tolerance and resync threshold times.
2023-01-14 12:48:18 +00:00
Mike Brady 7d243492fd Don't report an ENODEV condition as an error when getting a delay. 2023-01-13 18:03:26 +00:00
Mike Brady 76387f8291 Be more careful checking for ENODEV conditions in audio_alsa.c. Still a few places where it is not done... 2022-12-31 17:16:02 +00:00