Docs: record cross-rate playback; finish SEPT_VERIFY sample-rate checks

This commit is contained in:
2026-09-25 14:31:27 -04:00
parent 783ad7546e
commit c3e7556261
2 changed files with 30 additions and 2 deletions
+22
View File
@@ -1811,3 +1811,25 @@ Windows window class, so side-by-side installs could run the wrong channel's cod
each channel now registers its own class. Mechanism detail: `src/core/ui/CLAUDE.md`
(`window_origin`) and `src/shell/actions/drag_out_win.h`. Not DAW-verified — checks
are tracked in `docs/SEPT_VERIFY.md` §4.
### Cross-rate playback: ReaSampler 9000 plays any file rate at its own pitch and length
ReaSampler 9000 now plays a sample whose file rate differs from the project rate at its
correct pitch and wall-clock length — previously, e.g., a 44.1 kHz file in a 48 kHz project
played about 1.47 semitones sharp and short. The fix folds a file-rate/host-rate factor
into the read once per note rather than resampling at load; envelope stage times, the
filter, the loop crossfade, the Preserve (time-stretch) engine, and the bake all follow the
same factor (`SampleData::sourceRateRatio`, `play_params.h`; mechanism detail lives in
`src/core/instrument/CLAUDE.md`'s "Two frame domains" section, not restated here).
Same-rate playback at Rate 100% is unchanged, pinned by hashes of pre-change renders.
Landed in the same merge: a Preserve splice-crossfade fix that also changes output at
matched rate for high Rate settings (~200%+) — a down-splice previously read audio a prior
splice had already overwritten; Daniel approved the change. A file more than 32x the
project rate (`kMaxSourceRateRatio`, `play_params.h`) is refused: the ReaSampler 9000
editor title shows "... -- <refusal text>, not played" (clearing once another sample loads
or the project rate makes it supported), and a bake refuses with "cannot render: ...". A
project sample-rate change while the plugin is inactive re-stamps in place rather than
reloading from disk.
Not DAW-verified — checks are tracked in `docs/SEPT_VERIFY.md` §6.