mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-14 19:27:05 -04:00
AAC audio in an MP4/MOV whose sample rate differs from the mix rate (a 44.1 kHz clip in the 48 kHz preview or export, or the reverse) stuttered and sounded low-pitched in previews and in exported movies. Cause: FilmCraft's MP4 reader, asked for audio at a rate other than the file's, applied the edit list's priming offset (1024 samples for AAC) twice when it resampled: each read started about 1024 source samples early and extrapolated a ramp over its first ~940 samples (peaks near 100 against a 0.5 tone). Export and the preview mix ask for audio a frame or a device buffer at a time, so the ramp repeated dozens of times a second. Same-rate reads take FilmCraft's copy path and were exact. FilmCraft fixed this upstream in 5bf2203, 87 commits past the pinned revision. Fix: MediaPool reads footage audio at the source's own rate and resamples it itself (linear, by absolute sample position, so a range comes out the same however it is split into reads), for every container. Test: resampled_audio_read_in_frame_pieces_matches_ffmpeg (44.1 kHz AAC read at 48 kHz and 48 kHz at 44.1 kHz in 29.97 fps frame pieces, against ffmpeg's decode: max error 44 before, 0.002 after) and movies_carry_resampled_footage_audio (a 29.97 fps comp with 44.1 kHz AAC footage exported to MP4/AAC and MOV/PCM, decoded by ffmpeg: max error 8.7 before, 0.03 / 0.002 after). Co-Authored-By: Claude Opus 5.5 <[email protected]>