Skip to content

Releases: thorbjxrn/overdubber

v1.10.1 — Polish

Choose a tag to compare

@thorbjxrn thorbjxrn released this 21 Jun 17:36

Polish

  • Prevent screen lock during playbackisIdleTimerDisabled now stays on while playing, not just recording
  • Red delete buttons — mixer trash button uses .tint(.red) for clear destructive intent
  • Record button haptic fix — trigger on tap count instead of state boolean, fires reliably every press

v1.10.0 — Low-Latency Engine

Choose a tag to compare

@thorbjxrn thorbjxrn released this 21 Jun 17:30

Low-Latency Engine + Concurrency Hardening

Performance

  • 5ms hardware IO buffer (setPreferredIOBufferDuration)
  • 256-frame tap buffers for tighter loop boundary detection
  • Accelerate DSP: vDSP_measqv (RMS), vDSP_maxmgv (peaks), vectorized vDSP_vsmul + vvtanhf (tape warmth)
  • Pre-allocated double-buffered metering — zero heap allocation on real-time audio thread
  • Coalescing dispatch prevents unbounded meter queue growth under load

Concurrency Hardening

  • OSAllocatedUnfairLock for all cross-thread shared state (meter levels, tape warmth flag)
  • TaskGroup for bounded concurrent waveform loading
  • Task { @MainActor [weak self] } replacing DispatchQueue.main.async throughout
  • Proper [weak self] on all AdManager delegate callbacks
  • PurchaseManager transaction listener handles nil-self gracefully
  • Synchronous silence prefill to prevent file corruption race

Other

  • Bluetooth latency warning resets each session (was permanent dismiss)
  • Test target deployment aligned to iOS 17.0
  • 100 unit tests passing

v1.9.0

Choose a tag to compare

@thorbjxrn thorbjxrn released this 21 Jun 15:41

What's Changed

  • Analog-style VU meter tweening + playback metering by @thorbjxrn in #18
  • Ballistic smoothing + fade-on-stop for live waveform by @thorbjxrn in #19
  • HIG 8pt spacing grid polish by @thorbjxrn in #20

Full Changelog: v1.8.0...v1.9.0

v1.7.3

Choose a tag to compare

@thorbjxrn thorbjxrn released this 27 May 20:29

What's New

  • Screen stays awake during recording — the display no longer goes black mid-session; auto-lock resumes when recording stops
  • New default theme — blue-toned theme replaces the previous default
  • Natural waveform rendering — smoother, more organic waveform display

App Store

  • Headline overlays and card framing for screenshots

v1.7.2 — Ad optimization & library fix

Choose a tag to compare

@thorbjxrn thorbjxrn released this 24 May 20:17

What's New

  • Medium rectangle ad on export — replaced 50pt banner with 300x250 MREC for higher revenue
  • Combined waveform preview — single time-aligned waveform for M4A/WAV export preview
  • Premium stems gate — inline upsell when selecting Stems format

Bug Fixes

  • Library delete when ads blocked — fixed inability to delete more than one project when VPN blocks AdMob
  • Stable ad row IDs — list no longer thrashes on project deletion
  • Ad retry cooldown — 60s cooldown prevents shimmer→fail cycling; session-level failure skips network calls entirely

Removed

  • Interstitial ads after export (replaced by MREC revenue)
  • Tape gap toggle on export (always included when enabled in settings)

Technical

  • Removed dead interstitial loading code (wasted memory/bandwidth)
  • Time-aligned combined waveform (layers of different lengths now display correctly)
  • Session-level native ad failure tracking to minimize unnecessary network requests

v1.7.1 — Record from current playback position

Choose a tag to compare

@thorbjxrn thorbjxrn released this 24 May 19:49

What's New

  • Record from current playback position — hit record mid-playback and the new layer starts at the playhead, not from the beginning
  • Loop-mode offset fix — backing layers now play from the correct position when overdubbing mid-loop
  • Gap countdown stability — fixed timer stuck at 0 and stale deferred-recording state

Bug Fixes

  • Fix loop-mode backing layers ignoring playback offset
  • Fix pendingOverdubOnGapEnd not cleared on stop
  • Fix gap countdown timer stuck at 0 with self-clearing pattern
  • Guard against double-start in startRecording()

Tests

  • 19 new GapCountdownTests covering timer/state machine edge cases
  • OverdubOffsetTests for silence-padding alignment
  • SilencePaddingTests for buffer correctness

v1.5 — Immersive Themes

Choose a tag to compare

@thorbjxrn thorbjxrn released this 14 May 12:22

What's New

  • Immersive themes — Porta, Synth, and Sampler themes now go beyond accent colors with full background, surface, and control styling
  • Realistic VU meters — Hardware-inspired VU meters for the Portastudio theme with stereo, summed, and waveform modes (tap to cycle)
  • Deeper light modes — Porta and Synth light modes have richer, more distinctive palettes
  • Themed views everywhere — Settings, Mixer, Library, Export, and Paywall all respect the active theme
  • App Store screenshot previews — Debug gallery for capturing pixel-perfect screenshots

Fixes

  • Fixed NaN crash from empty audio buffers during route changes
  • Fixed Form icon tinting not responding to theme accent color
  • Fixed OnboardingView missing environment objects in fullScreenCover
  • Unified Porta waveform color with the orange accent family
  • Replaced Task churn with DispatchQueue.main.async for audio level updates
  • Tracked Xcode shared schemes for reproducible builds