v0.5.0 — File inspection, attribution, route awareness
Three smaller additions, closing kadr-audio's planned surface.
AudioFile — check before it reaches a composition
A picker returns a URL and a content-type filter is a guess: .audio admits files with no decodable audio track, and a user can rename anything. Handing such a URL to AudioTrack produces a composition that exports silently wrong, or fails deep inside AVFoundation with an error naming neither the file nor the problem.
let track = try await AudioFile.audioTrack(for: pickedURL)
// "“holiday.mov” doesn't contain any audio."
// "Pick a music or voice file — a video file won't work here."One asset load turns a silent failure at export into a sentence at import.
MusicAttribution — a credit line that degrades properly
Returns nil rather than a dangling " — " when both fields are missing, and treats whitespace-only metadata as missing. Library items with neither title nor artist are common enough that a credit made of spaces is a real outcome.
AudioSession.recordingWouldCapturePlayback
On the built-in speaker the microphone hears the playback too, so a voiceover recorded there arrives with the backing track already in it. That is bleed, not timing — none of v0.3's latency work touches it. Better to suggest headphones before the take than after.
41 → 56 tests.