Inside the project
Prepared with the project’s development agent from source and retained evidence. This is a project-owner assessment, not an independent customer review. Dated checks were not rerun for this website.
A calm, real-time sound-to-light surface: it turns nearby sound into a consistent, time-locked dot field so unpredictable ambient sound reads as anticipated rather than startling. Strongest working capability is the fully on-device pipeline (low-latency mic tap, hand-written FFT, envelope/onset analysis, 60fps SwiftUI dot field) with four arousal profiles, live sensitivity and zero networking. Now one codebase across iPhone, iPad and Mac. Limits: single visual mode, settings not persisted, no automated tests, not runtime-verified on device or released.
What stands out
- End-to-end on-device DSP->visual pipeline at 60fps
- Dependency-free: Apple frameworks + custom radix-2 FFT (no Accelerate, no SPM/third-party)
- Strong privacy posture: no networking, clean PrivacyInfo.xcprivacy
- Consistent, predictable sound->visual mapping (the core accessibility idea)
- Four sensory profiles + live sensitivity/movement for sensitivity tuning
- Single multiplatform target building green on iOS and macOS
Current limits
- Only one visual mode (dot field) ships
- VisualSettings is in-memory; resets on relaunch (no persistence code)
- No automated tests or test target
- Not verified running on a physical device; no public release
- Not zero-latency (hardware/OS buffers; mitigated by 5ms IO + 256-frame tap)
- Stereo direction needs >=2 input channels, else centred
- README still documents iOS/iPad only despite macOS target
Features & evidence
Dot-field sound surface
source23x31 dot field rendered in a 60fps SwiftUI Canvas; combines broad Gaussian pressure, mid-energy clustering, high-energy shimmer and an expanding transient ring
Recorded evidence
SonicDotFieldView.swift; built via xcodebuild iOS+macOS 2026-07-13; on-device runtime unverified
Audio feature extraction
sourceRMS->dB level, fast/slow envelope onset, transient decay, 1024-pt Hann FFT into 3 bands, stability, stereo direction
Recorded evidence
AudioFeatureExtractor.swift; compiles in built target; no unit tests
Custom radix-2 FFT
sourceHand-written iterative radix-2 FFT with bit-reversal + precomputed tables, no Accelerate
Recorded evidence
Radix2FFT.swift; no unit tests
Sensory profiles
sourceStill/Soft/Responsive/Expressive presets tuning opacity, radius, motion, spectral and transient gain
Recorded evidence
SensoryProfile.swift
Live settings
sourceSensitivity 0.35-1.8, surface movement 0-1.5, toggles for direction/status/auto-start
Recorded evidence
VisualSettings.swift + SettingsView.swift; in-memory only, not persisted
Interaction + status
sourceTap to pause/resume, long-press 0.45s for settings, LIVE/PAUSED pill, scenePhase start/stop
Recorded evidence
RootView.swift
Cross-platform build
sourceSingle multiplatform SwiftUI target for iOS 17+, iPadOS and native macOS 14+ (non-Catalyst); macOS entitlements app-sandbox + audio-input
Recorded evidence
project.yml, SonicReassurance.entitlements; BUILD SUCCEEDED both platforms 2026-07-13
On-device privacy
sourceAll analysis local; no networking; privacy manifest declares no tracking/collection
Recorded evidence
PrivacyInfo.xcprivacy; absence of any networking code
Review updates & corrections
- No source changes since the 2026-10-17 biography; code state identical and no edits were made.
- Build evidence unchanged: iOS + macOS BUILD SUCCEEDED 2026-07-13, not re-run today.
- This packet reframes the verified state as an owner review with a feature-state table and a demo plan.
Workflow walkthrough
A guide to the native workflow. These steps describe the app; only the recordings and images embedded on this page are available as website demonstrations.
- Open the app and grant microphone access; the dot field wakes
- Stay quiet to see the settled, low-arousal resting field
- Clap once to fire a single expanding pressure ring
- Play a low bass sound to see the broad central swell
- Long-press to open settings and switch Still -> Expressive to show the motion/contrast range
Planned captures · not yet available
- At rest: a quiet, settled surface (Soft profile)
- One sound, one calm ring (onset)
- Bass broadens the field (low-frequency swell)
- Settings: pick a profile, tune sensitivity
- Still vs Expressive side by side
- 10-20s screen recording of speech driving the field
- Optional web re-creation of the dot field (browser prototype explored in-session; no committed asset)
Development biography · earlier archive
Development profile compiled from project source and retained records in October 2026. Dates and test results describe those records; they do not imply a new build, live acceptance test or public release.
_Source-backed, read-only. Scope: the project archive Delivered inline ._
Biography
Sonic Reassurance (product name "MAUMAU") is a small, sharply-focused SwiftUI application that listens to the microphone and renders nearby sound as a restrained halftone field of dots. It is deliberately not a music visualizer in the usual sense — its design intent is the opposite of spectacle. Where a visualizer adds richness and surprise, this adds legibility: it gives a live sound a second, time-locked, predictable sensory channel, so the event can be coded as one benign thing rather than an ambient surprise to scan for. The README bounds the claim honestly — "an accessibility-oriented interface prototype, not a diagnostic or medical device" — which is the right posture for something aimed at people who find unpredictable soundscapes disorienting (for example some autistic or sensory-sensitive users).
The mapping from sound to image is intentionally simple and consistent, because predictability is the therapeutic idea. Loudness drives local dot size and a broad "surface pressure"; a sound onset fires a single expanding pressure ring; low frequencies cause broad swelling, mid frequencies clustered movement, high frequencies a fine shimmer; stereo balance shifts the field's centre to approximate horizontal direction; a stability measure settles the motion when a soundscape is steady; and everything decays gently back to equilibrium when sound stops . The same sound feature always maps to the same visual feature — that fixed grammar is what makes the surface reassuring rather than agitating.
Under the hood it is a clean, dependency-free DSP + SwiftUI pipeline across 13 Swift files (~900 LOC). MicrophoneAudioAnalyzer installs an AVAudioEngine input tap (256-frame buffer, 5 ms preferred I/O buffer on iOS) on a userInteractive queue and streams buffers to AudioFeatureExtractor. The extractor downmixes to mono, computes an RMS→dB→normalised level, runs fast/slow envelope followers (0.52 / 0.055 coefficients) whose difference yields onset detection, tracks transient strength and age with exponential decay, and applies an asymmetric attack envelope (0.40 rising / 0.085 falling). Every half-window it runs a 1024-point Hann-windowed FFT, split into three dB-normalised bands (low 40–250 Hz, mid 250 Hz–4 kHz, high 4 kHz–min(12 kHz, Nyquist·0.48)). Stability is 1 − 4.5·stddev over the last ~70 levels; direction is (R−L)/(R+L) from per-channel RMS. The FFT itself, Radix2FFT, is a hand-written iterative radix-2 transform with bit-reversal and precomputed sin/cos tables — notably with no Accelerate dependency, keeping the app self-contained and portable. Each cycle emits a SonicVisualFrame, a small Sendable/Equatable value type carrying level, transient, transientPhase, low/mid/highEnergy, direction and stability.
Rendering is a single SwiftUI Canvas inside a 60 fps TimelineView. SonicDotFieldView lays out a 23×31 dot grid and, per frame, superposes a broad Gaussian "pressure" (centred and nudged by direction plus idle drift), a clustered mid-energy sinusoid, a high-energy shimmer, and a Gaussian transient ring at an expanding radius — then maps the combined pressure to each dot's radius (0.9 up to the profile maximum) and opacity (capped at the profile maximum). Behaviour is shaped by four SensoryProfile presets — Still / Soft (default) / Responsive / Expressive — each a tuple of idleDrift, maximumOpacity, maximumRadius, transientGain, spectralGain, motionRate and responseGain. Still removes almost all idle motion; Expressive raises contrast and motion for creative use. VisualSettings exposes live sensitivity (0.35–1.8), surface movement (0–1.5), and toggles for direction, status text and auto-start.
Interaction is minimal by design: tap the surface to pause/resume listening, long-press (0.45 s) for settings, with a small LIVE/PAUSED pill top-right. The app auto-starts on launch and when returning to the foreground, and stops when backgrounded, returning the field to rest via a .silent frame. Privacy is a first-class property: PrivacyInfo.xcprivacy declares no tracking, no collected data types and no accessed-API reasons, and there is no networking code anywhere in the project — microphone audio is analysed entirely on-device and never leaves it. Originally an iPhone/iPad app, it was ported to a native (non-Catalyst) macOS build via one multiplatform target, so the same calm surface now runs on the Mac as a resizable window.
User journey: open the app → grant mic access → the field wakes and breathes with the room → tap to pause when wanted → long-press to pick a calmer (Still) or livelier (Expressive) profile and tune sensitivity → background the app and it quietly stops.
Modules / features (what a visitor can see, hear, try)
Authored functionality:
- Live dot-field "sound surface" (23×31 grid, 60 fps) — the main thing you see; reacts to level, onset, bands, direction, stability, decay. (
SonicDotFieldView) - Four sensory profiles Still/Soft/Responsive/Expressive — visibly change motion, contrast, dot size. (
SensoryProfile) - Settings sheet — profile segmented picker; sensitivity slider (0.35–1.8); surface-movement slider (0–1.5); toggles for show-direction, show-status-text, auto-start. (
SettingsView,VisualSettings) - Tap-to-pause/resume, long-press-for-settings, LIVE/PAUSED status pill. (
RootView) - Accessibility value on the surface (quiet / moderate / strong). (
SonicDotFieldView) - On-device feature extraction + hand-written FFT. (
AudioFeatureExtractor,Radix2FFT)
Nothing audible is produced — it is sound-in, light-out (no audio playback feature). Dependencies: Apple frameworks only (SwiftUI, AVFoundation, CoreGraphics, Foundation). No third-party runtime libraries.
Technical foundations & local packages
- Language/UI: Swift 5.0, SwiftUI (
Canvas+TimelineView), CoreGraphics drawing. - Audio: AVFoundation (
AVAudioEnginetap;AVCaptureDevicepermission, unified across iOS/macOS;AVAudioSessionon iOS only, guarded by#if os(iOS)). - DSP: first-party — envelope-follower onset detection, windowed-FFT band energies, custom
Radix2FFT(no Accelerate). - Local/third-party packages: NONE. No Swift Package Manager dependencies, no CocoaPods/Carthage. The only external tool is XcodeGen (
project.ymlis the source of truth;supportedDestinations: [iOS, macOS],SDKROOT=auto). - Signing/privacy: macOS
SonicReassurance.entitlements(app-sandbox + audio-input) viaCODE_SIGN_ENTITLEMENTS[sdk=macosx*];NSMicrophoneUsageDescriptionset;PrivacyInfo.xcprivacyclean.
Maturity by feature (dated evidence)
- Source implemented: YES — 13 Swift files (~900 LOC); core authored ~2026-07-13 (file dates + merged export 2026-07-13T23:36).
- macOS multiplatform port: YES — present on disk in
project.yml/App(supportedDestinations, entitlements), dated 2026-07-13. - Tests passed: NONE — no test target or test files exist in the project.
- Built: YES (prior agent session, 2026-07-13) —
xcodebuildsucceeded for bothplatform=macOSandgeneric/platform=iOS(BUILD SUCCEEDED). NOT re-run in this read-only pass. - Installed / runtime-on-device verified: UNKNOWN — no evidence the app was launched/run; README notes mic testing needs a physical device.
- Released / deployed (App Store / public): UNKNOWN / none found — no release notes, CHANGELOG, TestFlight or store link in the repo. MARKETING_VERSION 1.0 in build settings only.
Roadmap, limitations, FAQs
Roadmap (planned, not built): additional visual modes beyond the dot field (e.g. brush-swell, ping-pong); persist VisualSettings across launches; a reduce-motion / high-contrast accessibility profile; update README to document macOS; capture real screenshots/demos.
Limitations: not zero-latency ; direction only meaningful with ≥2 input channels, else centred ; one visual mode only; settings not persisted; not a medical/diagnostic device ; no app icon/asset catalog; README still says iOS/iPad-only despite the macOS target.
FAQs:
- Does my audio leave the device? No — all on-device; no networking code;
PrivacyInfo.xcprivacydeclares no collection/tracking. - Is it a medical or therapy tool? No — an accessibility-oriented interface prototype .
- Which devices? iPhone, iPad (iOS 17+) and Mac (macOS 14+), one multiplatform build.
- Do I need a special microphone? No; any built-in mic. Stereo direction needs ≥2 channels.
- Can I make it calmer or livelier? Yes — choose a profile (Still→Expressive) and adjust sensitivity / surface movement.