Commit Graph
43 Commits
Author SHA1 Message Date
Mike Brady b405c0b896 Version 5.0 Major Release.
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.

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 for PR #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:
Enhanced compatibility with AirPlay 2 AutoMix and Smart Tracklists resulting in less unexplained track skipping.
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 for PR #2137.
Fixed compatibility with mbedtls library version 3.4+ (present on recent Linux versions). Thanks to Christian Beier for finding and fixing the bug.
Fixed PulseAudio backend so that PA_ERR_NODATA returns "No latency data yet". Thanks to Vladimir Shakov for the report and fix.
Ensured old flush requests are deleted when a new play session starts. Thanks to saujanyashah for the report.
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 for PR #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.
Network interface selection now only considers interfaces that are up, running and not loopback interfaces. Thanks to Carl Johnson for the suggestion.
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.
2026-02-13 15:17:40 +00:00
Mike Brady 8e23ad3f89 prevent cancellation while performing ao-related operations. 2024-06-29 20:00:13 +01:00
Dan GeorgeandGitHub 1ff669d4d2 Specify libao input channel ordering 2023-05-24 15:15:09 +10:00
Mike Brady fd880056fb Squashed commit of the following:
Add three parameters to the backend play() function call -- (1) a flag indicating whether the samples are timed or not. If timed, (2) the timestamp and (3) the local time at which the first frame should be heard.
    Update missing pipewire library message.
    Makefile.am fix.
    Update the SHM version and fix the SHM name so that it works with FreeBSD.
    Remove redundant (?) AC_HEADER_STDC check.
    Fix compilation and installation under FreeBSD -- changes to allow building in a separate directory broke the FreeBSD build process.
    Add AC_CHECK_LIB for gcrypt in case PKG_CHECK_MODULES fails to find it.
    Find gcrypt using pkg-config
    Add code to detect when the RTSP channel goes idle for a period, and use it to reset clocks and timings, etc. so that SPS resumes correctly where the source has gone to sleep while playing a realtime stream and has subsequently woken up.
    Don't exit if a UDP Clock Control packet is empty. Also check minimum packet size.
    Remove some very experimental code which may cause memory and port leaks.
    Strip file path from the filename used in debug messages, information messages, warnings and fatal error messages.
    BB fix to Makefile.am -- overwriting the DBUS stuff with MPRIS definitions, duh.
    Fix some problems building on FreeBSD and tidy up the use of the "sed" editor.
    Fix some problems building on picore.
    Fix an uninitialised variable
    start using the "nqptp" SMI
2022-09-12 15:19:52 +01:00
Mike Brady cb03d5c68b Close the driver when play stops; reopen it when it restarts. Seems a lot more stable. Add a list of drivers to the help text. 2022-08-09 20:52:08 +01:00
Mike Brady cd9da86fc3 Add a 'stats' function to the audio back ends to replace the 'rate_info' function. Zero all except the alsa back end. 2021-11-20 13:59:16 +00:00
Mike Brady 83c0405d03 Add automatic bit depth and speed selection for alsa devices. Set rate and format to "auto" by default. Always look for the greatest bit depth, but the lowest multiple of 44,100.
Improve 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.

For the "disable_standby_mode" setting, change "while_active" to "auto".
2019-05-07 10:19:04 +01:00
Mike Brady 8cabb16f25 Initial very rough attempt at a jackaudio backend. 2018-08-31 12:39:18 +01:00
Mike Brady 76c5dd9285 Stop using SIGUSR1 for cancelling threads, use pthread_cancel and friends instead, fix some memory leaks, add accurate ouput rate calculation to statistics, add "quit" verb to MPRIS and native d-bus interfaces. Probably still buggy. 2018-07-30 10:07:11 +01:00
Mike Brady ea20840d6c Make the play function return a status (ignored for the present). Clean up audio_alsa by removing all the die calls and placing the alsa_mutex calls in pthread cleanup routines. 2018-07-29 13:45:42 +01:00
Mike Brady 8a5a29e2c2 Move to using pthread_cancel in place of pthread_kill -- due to a problem in CYGWIN, but the move makes the code simpler and more rugged. Tidy up the code a bit and remove a clobbering warning. 2018-05-17 10:29:59 +01:00
Mike Brady 9aa920ab81 Fix a benign type definition mismatch 2018-05-16 18:32:17 +01:00
Mike Brady 0cd8a2ce90 Remove more causes of warnings at -Wextra levels 2018-03-07 22:05:11 +00:00
Mike Brady f8518af7e0 Remove some more causes of warnings. 2018-03-07 19:22:18 +00:00
Mike Brady e513e5330c Tidy up source using clang-format 2017-07-31 11:57:57 +02:00
Mike Brady b7864b4ecf Move common audio backend settings like buffer size and offsets to the "general" settings stanza. Improve the resync code a little. 2017-07-21 12:29:03 +02:00
Mike Brady d428585715 Add code to read audio_backend_silent_lead_in_time settings. 2017-07-06 19:13:10 +01:00
Mike Brady 0ad34287c3 Stop the "ao", "pulse" and "sndio" backends from complaining about the new output rate and format information. 2017-03-13 19:10:08 +00:00
Mike Brady cf29625d2c Clang Format 2017-02-11 12:12:07 +00:00
Mike Brady 5f61e30510 Recognise and use deprecated settings and issue warnings. 2017-01-30 18:23:49 +00:00
Mike Brady 064bd293c5 Tidy up with a clang-format 2016-09-11 10:35:53 +01:00
Mike Brady 4b5dba7381 Fix small bug introduced moving over to time-based settings 2016-09-05 15:23:31 +01:00
Mike Brady ae84366e8d Change over to times as opposed to frames for setting timing options 2016-09-04 19:37:22 +01:00
Mike Brady 01e5128507 Add ability to set output format and output rate 2016-08-19 12:51:15 +01:00
Mike Brady d546f4bbdb Correct option tag in the ao subsystem to read audio_backend_buffer_desired_length rather than audio_backend_buffer_desired_length_software 2015-12-30 10:11:20 +00:00
Mike Brady 4c70223f5a Work in progress, doesn't compile 2015-11-05 18:03:58 +00:00
Mike Brady 026b970680 Add latency and buffer length options for libao 2015-10-31 13:51:08 +00:00
Mke Brady 87a0475c16 Reformat using clang-format. 2015-06-01 23:16:50 +01:00
Mke Brady 54250f7552 Simplify init function, add defaults for latency offset and buffer size. Remove redundant timer stuff from audio_dummy.c. 2015-06-01 21:38:56 +01:00
Mike Brady df7a046b63 Pass in libconfig info during init. 2015-05-04 17:16:53 +01:00
Mike Brady a2790fc102 Improve metadata output -- maybe it works reliably now. Add call to get audio parameters from back ends, to be able to give volume metadata. 2015-03-16 11:11:54 +00:00
Mike Brady afe41c428d add null placeholders for flush and delay 2014-04-30 20:32:29 +01:00
James Laird 984909668d audio_ao, audio_pulse: make usage indent consistent 2013-06-20 18:30:42 +10:00
James Laird 706e4d6518 ao, shairport: fix option parsing
- don't push unrecognised args to the audio driver
- get ao to parse from first argument
- ao checks for unrecognised options
2013-06-19 13:56:11 +10:00
Paul Lietar e301306a35 Fix libao output driver.
The driver id returned by libao wasn't checked correctly.
When the driver did not exist, libao returns a negative number. The
libao output driver checked for a non zero id.
This caused shairport to refuse to use the first driver, and not fail
when using a non-existant driver.
2013-06-09 20:32:29 +02:00
James Laird 8259ae60e8 die/warn functions now have implicit newline at the end 2013-06-04 00:30:17 +10:00
MaZderMind 44a25abaf8 change getopt return from char to int 2013-04-02 22:55:08 +02:00
James Laird 9b9899b843 ao: actually use the options we collect 2013-04-02 08:45:32 +11:00
James Laird 31d2570f3d ao: shutdown properly 2013-04-01 23:17:15 +11:00
James Laird cf8401dbc8 Add copyright notices. 2013-04-01 21:57:11 +11:00
James Laird efe7d2c63c ao: add option parsing 2013-04-01 21:44:30 +11:00
James Laird 9b33878c59 audio: output selection functionality 2013-04-01 21:43:24 +11:00
James Laird a2fb5d219d Refactor and rewrite.
Perl script is removed in favour of C. Stale documentation and initfiles
are removed for now also.

C interface works, but still needs work (for example, mDNS is missing) -
see TODO.
2013-04-01 18:57:08 +11:00