Skip to content

Latest commit

 

History

History
55 lines (47 loc) · 5.84 KB

File metadata and controls

55 lines (47 loc) · 5.84 KB

Overdubber Backlog

Bugs

  • Boundary-stop data loss — fixed in PR #15
  • Stale onLoopTransition can corrupt new recording session — fixed: engine stamps each fired onLoopTransition with a recordingGeneration (bumped on every stopRecording, like playbackGeneration); handleLoopTransition drops the transition if the live generation moved on before its deferred Task ran
  • Toggle-off pending-file leak — fixed: toggle-off path now deletes pre-created .caf and resets pendingNextLayerIndex, mirroring stopRecording cleanup
  • Tape loop gap timing drift — fixed: rewrote gap logic to use engine.pause/resume with single asyncAfter timing (3f8fa95, 878d477)
  • Library view jittery scroll when VPN blocks AdMob — fixed in a10bc14
  • Library view can only delete one item when AdMob blocked — fixed in e875ed9
  • Playback cut when video ad renders in library/export view — fixed in PR #23: GMA SDK was swapping the shared AVAudioSession to .ambient/.soloAmbient; now isAudioSessionApplicationManaged = true + ads muted
  • Flaky test suite / RecorderViewModel deinit crash — fixed in PR #24: MainActor.assumeIsolated in deinit trapped when a background Task dropped the last reference, crashing the test host and randomly failing unrelated tests; now isolated deinit

Small / Polish

  • Upload localized App Store metadata — done 2026-07-09: all 19 store locales (de-DE, ja, es-ES/MX, zh-Hans, ko, hi, fr-FR/CA, pt-BR/PT, it, no, sv, da, tr, id, pl, uk) created on v1.12.0 with name, subtitle, description, keywords, what's-new via asc-mcp
  • 1.12.x release sequence — 1.12.0 (16 languages + localized store pages) is APPROVED, PENDING_DEVELOPER_RELEASE, holding per decision 2026-07-09. When ready: (1) release 1.12.0 via app_versions_release, (2) create 1.12.1 in ASC (blocked until then), (3) set localized what's-new (bugfix line per locale), (4) archive v1.12.1 tag (has Untitled-name fix d262f99), attach build, submit. Localized media (6 framed screenshots + preview video, all 19 locales) rides along automatically; en-US untouched (PPO test)
  • Core Haptics on record/stop — tactile click via Taptic Engine on record start/stop, loop boundary crossings. Sub-ms precision, "real instrument" feel. Needs .sensoryFeedback approach for reliability
  • Destructive action styling — shipped in v1.10.1: red foreground on mixer delete button
  • Duplicate project in library — add duplicate action to swipe menu, accent-colored
  • App icon refresh — current icon feels too frowny, needs more inviting/energetic feel
  • Reduce punch-in latency — shipped in v1.10.0: 5ms IO buffer, 256-frame tap buffers, Accelerate DSP, metering off audio thread
  • Prevent screen lock during playback — shipped in v1.10.1
  • Always-On Display support (14 Pro+) — shipped: idle timer disabled during both recording and playback
  • Action Button mapping (15 Pro+) — expose start/stop recording as App Shortcut so users can trigger via Action Button hands-free

Medium

  • Tape loop gap — shipped in v1.7.0
  • Import audio — shipped: premium file import as a layer (transcodes to CAF, preserves rate/channels)
  • Background audio (playback + recording) — shipped in v1.11.0: UIBackgroundModes audio, NowPlayingManager with lock screen transport controls, interruption handling with playback resume
  • Dynamic Island / Live Activities — show recording duration and level when backgrounded. Musicians switch to lyrics/chord apps mid-take. Depends on background audio
  • Sample rate selection — allow 44.1/48/96 kHz via setPreferredSampleRate. Main value: let external USB interfaces record at higher rates. Show actual vs requested rate in settings
  • USB audio interface detection — detect class-compliant device capabilities (available sample rates, input count) and surface in settings
  • Input channel selector — let users pick which input channels to record from when an external interface offers more than stereo (currently clamped to first 2 channels)
  • Bounce down + 4-track cap — flatten all layers into one, then lower cap from 8 to 4. Build sequentially: bounce-down first, then cap, ship together
  • Record from current playback position — shipped
  • Adjust mixer levels during recording — open mixer and adjust volumes while recording is live
  • Delete layer without stopping recording — detach player node and continue. Needs node-to-layer map
  • Quantized loop start — delay recording start until next loop boundary (hardware looper behavior)
  • Looping playback memory optimization — shipped in PR #13: overdub loops stream from disk (queue-ahead scheduleFile), no in-memory PCM per layer
  • ViewModel integration tests — extract AudioEngineProtocol, test state transitions with mock

Big / Future

  • AUv3 plugin hosting — let users load third-party Audio Unit effects (reverb, compression, amp sims) per layer. Huge for musicians but significant implementation
  • Non-destructive effects — reverb, delay, EQ per layer via AVAudioUnitEffect nodes. Natural stepping stone toward AUv3
  • Spatial Audio monitoring — spatialized panning per layer via head-tracked AirPods Pro. Niche but unique overdubbing experience
  • Session recording — record entire live session as one continuous file, separate from layer export
  • Clip editing suite — fade in/out, trim edges, slip/reposition. Cohesive musician-mode feature set
  • Subsection looping (premium) — draggable waveform markers for loop-in/loop-out
  • Tape/analog artifacts — wobble (wow & flutter), tape hiss, speed ramp on record start
  • Musician-mode features — metronome/click track, quantize to grid, pan per layer, layer rename, undo last layer
  • Localization (major languages)
  • iPad and landscape mode overhaul