Skip to content

Version 0.12.0

Latest

Choose a tag to compare

@sbooth sbooth released this 15 Feb 13:29
· 1 commit to main since this release
108ed7c

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 *)previouslyPlaying

After (0.12.0):

- (void)audioPlayer:(SFBAudioPlayer *)audioPlayer 
    nowPlayingChanged:(SFBAudioPlayerNode *)nowPlaying

Migration 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 *)audioPlayer

After (0.12.0):

- (void)audioPlayer:(SFBAudioPlayer *)audioPlayer 
    audioEngineConfigurationChange:(NSDictionary *)userInfo

Migration Guide:

  1. Update the method name to include the audioPlayer: prefix
  2. Add the userInfo: parameter to access configuration change details
  3. Consult the dictionary for specific information about the configuration change

3. Class Rename: OutputSourceOutputTarget (#855)

All references to OutputSource have been renamed to OutputTarget for better semantic clarity.

Migration Guide: Perform a find-and-replace in your codebase:

  • SFBOutputSourceSFBOutputTarget
  • OutputSourceOutputTarget
  • 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_MASK for 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 BOOL with bool, NULL with nullptr, 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

View all 82 changes

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.