Skip to content
CAI
Software that uses CAICheck a score

dmrschmidt/DSWaveformImage

49.8

Weak · 1 October 2026

4.2k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Swift library for generating and rendering audio waveforms, supporting both static image creation and real-time visualization. It provides a unified API across iOS, macOS, and visionOS, offering both SwiftUI and UIKit components for displaying waveforms with various styles such as gradient, spectral tint, and circular layouts. The library handles audio analysis, including stereo channel separation and amplitude scaling, and is distributed via Swift Package Manager.

How it got here

2013 — SwiftUI and SPM migration

6 changes.

The project underwent a major version update to 14.0.0, introducing multi-platform support and a new SwiftUI API layer while dropping legacy Objective-C components. This release also shifted the primary installation method from CocoaPods to Swift Package Manager, requiring modern deployment targets and restructuring the public API.

2022–2026 — Multi-platform rendering and SwiftUI expansion

13 changes.

The library introduced comprehensive support for stereo, multi-channel, and spectral tint waveform rendering, alongside a new SwiftUI and UIKit component layer for static and live visualization. Development focused on unifying the example applications across iOS, macOS, and visionOS to demonstrate these capabilities, while adding robust test coverage for amplitude scaling, memory safety, and rendering correctness.

Features

The VisionOS example project now includes a SwiftUI app that displays a curated gallery of waveform visualizations. Users can explore static waveform images and progress-based rendering through a TabView interface, with the app configured for the visionOS platform using the appropriate asset catalog and scene manifest.

Example/DSWaveformImageExample-VisionOS · high confidence

Added Xcode scheme for DSWaveformImage

An Xcode scheme file for the DSWaveformImage target has been added, enabling the library to be built, tested, and profiled directly within Xcode. This configuration supports standard development workflows such as running tests, launching for debugging, and archiving for distribution.

.swiftpm · high confidence

Introduces new WaveformRenderer protocol with circular and stereo linear rendering capabilities

The library now uses a new \WaveformRenderer\ protocol to decouple drawing logic, introducing a \CircularWaveformRenderer\ that supports both filled circles and hollow rings (annuli) with proper even-odd fill handling. The \LinearWaveformRenderer\ has been updated to support stereo channel rendering (splitting left/right channels into top/bottom halves) and a new \.spectralTint\ style that colors waveform columns based on FFT spectral centroids. These changes provide a more extensible API for custom waveform visualizations while fixing previous issues with ring rendering and stereo channel separation.

Sources/DSWaveformImage/Renderers · high confidence

New SwiftUI waveform rendering components and styling system

The library introduces a new SwiftUI rendering layer in the DSWaveformImageViews module, featuring WaveformView for displaying audio waveforms from URLs, WaveformShape for custom path generation, and WaveformLiveCanvas for real-time sample visualization. A new DefaultShapeStyler provides built-in support for filled, outlined, gradient, striped, and spectral-tint styles, while a VersionMigrations helper ensures compatibility with iOS 15, macOS 12, and visionOS by managing deprecation warnings for the onChange modifier.

Sources/DSWaveformImageViews/SwiftUI · high confidence

New UIKit waveform views for static and live audio visualization

This change introduces two new UIKit components: \WaveformImageView\, which renders a static waveform image from an audio file URL, and \WaveformLiveView\, which displays a real-time waveform by accepting normalized audio samples. Both views are available on iOS and visionOS, allowing developers to integrate audio visualization directly into their interface hierarchies.

Sources/DSWaveformImageViews/UIKit · high confidence

The Example/Shared directory now provides a unified, cross-platform SwiftUI gallery (WaveformGalleryView) and dedicated showcase views (LiveRecordingShowcase, ProgressShowcase) that demonstrate the library's rendering capabilities. This update introduces shared UI primitives (GalleryHero, GallerySection, WaveformCard) to standardize the look and feel across platforms, implements a live recording demo with a pad-silence toggle that applies to all canvases, and adds an interactive progress scrubbing demo with haptic feedback. The gallery also exposes controls for amplitude scaling (absolute vs. normalized) and various waveform styles.

Example/Shared · high confidence

Restore macOS example application

The macOS example application has been re-added, providing a SwiftUI-based interface that showcases waveform visualization capabilities. The app includes a main window with tabs for browsing static waveform files and viewing progress indicators, requiring macOS 12.0 or later to run.

Example/DSWaveformImageExample-macOS · high confidence

Restored iOS example app with live audio recording and UIKit showcase

The iOS example application has been re-added to the repository, providing a complete reference implementation for testing and demonstration. It includes a new \AudioRecorder\ component that bridges Objective-C audio management to Swift, enabling live microphone recording and real-time waveform visualization. The app features a modernized UIKit showcase (\UIKitShowcaseViewController\) that demonstrates static rendering styles (circular, linear, blended) and live capture, alongside SwiftUI hosting controllers for the shared gallery and progress views.

Example/DSWaveformImageExample-iOS · high confidence

Unified example project for iOS, macOS, and visionOS

The example application has been restructured into a single Xcode workspace that supports building for iOS, macOS, and visionOS. This change introduces dedicated app targets for each platform, allowing users to run the waveform demonstration on Apple Vision Pro alongside iPhone and Mac devices, while sharing common gallery and playback showcase code across the platforms.

Example/DSWaveformImageExample.xcodeproj · high confidence

Waveform rendering now supports stereo, multi-channel, and spectral tint styles

The library now allows users to render individual audio channels or full stereo waveforms (left/right) instead of only merged mono, and introduces a new spectral tint style that colors waveform columns based on their frequency content. These capabilities are driven by new \ChannelSelection\ and \Style.spectralTint\ configurations, along with the \WaveformAnalyzer.analyze\ method for computing spectral centroids.

Sources/DSWaveformImage · high confidence

Removals

Removal of legacy Objective-C waveform components

The \DSWaveformImage\ class, \DSWaveformImageView\ UI component, and the \DSWaveformStyle\ enumeration have been removed from the framework. This eliminates the legacy Objective-C implementation that generated waveform images from audio assets, indicating a shift away from these specific classes in the current codebase.

DSWaveformImage · high confidence

Removal of legacy Xcode project file

The \DSWaveformImageExample.xcodeproj\ project file has been deleted from the repository. This change removes the legacy Xcode project configuration that previously managed the build settings, source files, and framework dependencies for the DSWaveformImage example application.

DSWaveformImageExample.xcodeproj · high confidence

Removal of legacy iOS example app files

The DSWaveformImageExample project has removed its legacy iOS implementation files, including the Main\_iPad and Main\_iPhone storyboards, the Objective-C application delegate and view controller sources, the Info.plist, prefix header, and asset catalogs. This cleanup eliminates the old manual UI layout and app lifecycle code, reflecting a shift away from the original iOS sample structure.

DSWaveformImageExample · high confidence

Behavioural changes

Major version 14.0.0 with multi-platform support and SwiftUI integration

The library has been updated to version 14.0.0, expanding support to iOS, iPadOS, macOS, visionOS, and Mac Catalyst. This release introduces a new SwiftUI API layer (WaveformView, WaveformLiveCanvas, WaveformShape) alongside existing UIKit views, and restructures the public API into core (drawer/analyzer) and views modules. Key behavioral changes include moving channel selection logic from Configuration to the Renderer, adding new rendering styles (gradient, striped, spectral tint), and introducing amplitude scaling and damping options. The project also adopts Swift Package Manager as the primary installation method and updates the Ruby toolchain version to 2.7.2.

(repo-wide) · high confidence

Removal of legacy XCTest boilerplate and Info.plist in test target

The DSWaveformImageExampleTests target has removed its manual Info.plist, InfoPlist.strings, and the default XCTest implementation file (DSWaveformImageExampleTests.m). This cleanup eliminates the placeholder test structure and manual configuration files, likely as part of an Xcode project upgrade or migration to a more modern test configuration.

DSWaveformImageExampleTests · medium confidence

Restored iOS example app with playback and recording demos

The iOS example application has been re-enabled, introducing a new launch screen and a main interface organized around a tab bar. Users can now navigate to distinct demo sections including Static Files, a UIKit showcase, Live Recording, and a new Progress view that illustrates playback progress implementation.

Example/DSWaveformImageExample-iOS/Base.lproj · high confidence

Updated README screenshots and added App Store badge

The Promotion assets have been refreshed to improve documentation clarity and conversion. A new Swift script in \Promotion/Generator\ now regenerates all README screenshots using a consistent stereo audio source and 2x rendering scale, ensuring visual consistency across feature cards. Additionally, an official App Store download badge (\appstore.svg\) has been added to the promotion materials.

Promotion · high confidence

Test coverage

Added test coverage for waveform amplitude scaling, spectral tinting, and memory safety

Added comprehensive tests for the DSWaveformImage library, including unit tests for the new \.absolute\ and \.normalized\ amplitude scaling modes to ensure correct peak mapping and silence handling. Added tests verifying that the new \.spectralTint\ style correctly maps FFT spectral centroids to color gradients for low and high frequencies. Added regression tests for stereo image generation to ensure the async path and static helpers correctly handle doubled sample counts for stereo renderers. Added tests to verify that \.up\ and \.down\ waveform sides render to distinct halves of the canvas. Added memory safety tests to ensure the waveform analyzer's backfill logic does not allocate excessive memory when processing files with few samples relative to the target count, preventing OOM crashes on long audio files.

Tests · high confidence

Dependencies

Migration to Swift Package Manager and removal of CocoaPods

The library now supports installation via Swift Package Manager (SPM) by introducing a new Package.swift file, while simultaneously removing the legacy DSWaveformImage.podspec to discontinue CocoaPods support. This change aligns the project with modern Swift ecosystem standards, requiring a minimum deployment target of iOS 15 and macOS 12 as defined in the new package manifest.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 57 → 50 (-6.8)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 98 → 98 (-0.1)
  • Architecture 93 → 96 (+3.7)
  • Maturity 55 → 55 (-0.0)
  • Readiness 33 → 24 (-9.9)
  • Security 100 → 87 (-13.3)

Resolved (3)

  • Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)

New (9)

  • Coverage not measured — Swift suite
  • Duplicated block (22 lines × 2) (Promotion/Generator/main.swift)
  • Duplicated block (5 lines × 2) (Example/Shared/WaveformGalleryView.swift)
  • End-of-life runtime: Ruby 2.7
  • Inconsistent concurrency model. One overload returns [Float] synchronously (blocking), while another uses a completion handler callback. This creates confusion about whether the API is synchronous or asynchronous, especially since qos suggests background work.
  • Inconsistent method naming and parameter structure for data transformation. applyAmplitudeScaling takes the data as the first argument and the config as a named parameter. damp also takes data first but uses with: for a complex Configuration object that includes damping settings, while also having a separate isStereo boolean. This makes the API feel disjointed compared to Configuration-based approaches elsewhere.
  • Off the main sequence: DSWaveformImage
  • Redundant overloads with implicit default behavior. The second signature is a subset of the first, implying a default channelSelection. This forces users to guess the default behavior or check documentation, rather than having a single clear entry point or explicit default parameter.
  • Same concurrency inconsistency as above. Synchronous return vs. asynchronous completion handler for the same high-level operation waveformImage.

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

dmrschmidt/DSWaveformImage was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit bc1b2b1e7fce2eb46150c64045c720782d18595d — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.