SFBAudioEngine Version 0.12.0 Release Notes
Published: February 15, 2026
🚨 Breaking API Changes
This release contains three breaking API changes that require code updates when migrating from version 0.11.0.
1. Delegate Method: audioPlayer:nowPlayingChanged: (#569)
The previouslyPlaying parameter has been removed from the delegate method signature.
Before (0.11.0 and earlier):
- (void)audioPlayer:(SFBAudioPlayer *)audioPlayer
nowPlayingChanged:(SFBAudioPlayerNode *)nowPlaying
previouslyPlaying:(SFBAudioPlayerNode *)previouslyPlayingAfter (0.12.0):
- (void)audioPlayer:(SFBAudioPlayer *)audioPlayer
nowPlayingChanged:(SFBAudioPlayerNode *)nowPlayingMigration Guide: Remove the previouslyPlaying: parameter from your delegate method implementation. If you need to track the previously playing item, maintain this state in your delegate implementation.
2. Delegate Method: Audio Engine Configuration Change (#692)
The audio engine configuration change notification has been renamed and now includes a userInfo dictionary parameter.
Before (0.11.0 and earlier):
- (void)audioPlayerAVAudioEngineConfigurationChange:(SFBAudioPlayer *)audioPlayerAfter (0.12.0):
- (void)audioPlayer:(SFBAudioPlayer *)audioPlayer
audioEngineConfigurationChange:(NSDictionary *)userInfoMigration Guide:
- Update the method name to include the
audioPlayer:prefix - Add the
userInfo:parameter to access configuration change details - Consult the dictionary for specific information about the configuration change
3. Class Rename: OutputSource → OutputTarget (#855)
All references to OutputSource have been renamed to OutputTarget for better semantic clarity.
Migration Guide: Perform a find-and-replace in your codebase:
SFBOutputSource→SFBOutputTargetOutputSource→OutputTarget- Any related class, method, or variable names
✨ Enhancements
Audio Processing
- ITU BS.1770 Replay Gain: Implemented revised replay gain calculation using the ITU BS.1770 standard for improved loudness normalization (#842)
- FLAC Channel Layout Improvements: Channel layouts for FLAC files now match Core Audio conventions (#848)
- WAVEFORMATEXTENSIBLE Support: Added support for
WAVEFORMATEXTENSIBLE_CHANNEL_MASKfor better Windows audio format compatibility (#849)
🐛 Bug Fixes
- Buffer Offset Calculation: Fixed an error in buffer offset calculation that could affect audio encoding (#805)
🔧 Code Quality & Maintenance
Formatting & Style
- Comprehensive Code Formatting: Applied clang-format across the entire codebase for consistent code style (#794)
- Clang-tidy Improvements: Applied multiple clang-tidy readability improvements (#802, #804, #807)
- Modern C++ Practices: Replaced
BOOLwithbool,NULLwithnullptr, and improved pointer checks (#810, #811, #821)
Licensing
- SPDX File Headers: Added SPDX file headers for better license compliance (#841)
- MIT License: Updated to use MIT license text from REUSE (#846)
Dependencies
- Dependency Updates: Updated and refined external dependencies (#833, #866)
- Removed CXXCoreAudio Dependency: Replaced with internal implementations (#836)
- Removed CXXAudioToolbox Dependency: (#835)
- Added CXXDispatchSemaphore: New dependency for synchronization primitives (#838)
CI/CD
- cpp-linter Workflow: Added automated C++ linting to continuous integration (#869, #870)
- clang-format Checks: Added automated formatting verification (#798)
📦 Full Changelog
This release includes 82 pull requests focused on code quality, modernization, and the breaking API changes listed above. Notable internal improvements include extensive refactoring for better maintainability and standards compliance.
📥 Installation
Swift Package Manager
dependencies: [
.package(url: "https://github.com/sbooth/SFBAudioEngine", from: "0.12.0")
]🙏 Credits
All changes in this release were authored by @sbooth.
Need Help? If you encounter any issues migrating to version 0.12.0, please open an issue on GitHub.