Skip to content

14.5.0

Latest

Choose a tag to compare

@dmrschmidt dmrschmidt released this 16 May 21:28
· 8 commits to main since this release

14.5.0

Added

  • Multi-channel rendering, including a dedicated stereo mode. Renderers can now interpret audio as .merged (default, unchanged), .specific(N) for a single channel, or .stereo for a split L/R image. Use via LinearWaveformRenderer(channelSelection:) or the new LinearWaveformRenderer.stereo factory; pass channelSelection: to WaveformAnalyzer.samples(...) if you're consuming raw samples. See Multi-Channel (Stereo) Support in the README. #111

Fixed

  • Multi-hour audio files no longer crash with OOM (#93). The end-of-loop backfill in WaveformAnalyzer previously padded the input sample buffer with up to gigabytes of zeros when the read produced fewer samples than the target (most commonly when the reader was interrupted by backgrounding). It now pads the output array with silence-equivalent floats — allocation is O(target), independent of audio duration. Per-chunk reads are wrapped in autoreleasepool to keep CMSampleBuffer references from pinning memory during long reads.
  • CircularWaveformRenderer(kind: .ring(_)) now renders a true annulus for .filled, .gradient, .outlined, and .gradientOutlined (previously only .striped looked right; the others filled the inner disk).

Changed

  • WaveformAnalyzer.AnalyzeError gained .invalidChannelIndex(requested:available:) for the new .specific(N) selector. Source-breaking for exhaustive switches without @unknown default:.

Full Changelog: 14.4.0...14.5.0