Tempo map from hit points
doseedo_tempo_mapScoring to picture: turn HIT POINTS (a cut, an impact, the title card — as seconds from the cue start or SMPTE timecodes) into a TEMPO MAP that lands each hit exactly on a downbeat (or a beat — per hit with hits[].land), staying near your tempo and inside bpm_range. Returns tempo_map [{beat, bpm}] to pass unchanged to doseedo_render_midi / doseedo_render_score / doseedo_session_from_stems, and hits[] with the beat, bar and beat-in-bar each hit lands on — write the accent, stinger or change there. Handles 23.976 / 24 / 25 / 29.97 (";" = drop-frame) / 30 / 50 / 59.94 / 60 fps timecode. Pure math: free, instant, no key needed.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| bpm | Yes | The cue's tempo (20–300) — the map stays as close to it as the hits allow. | |
| fps | No | Frame rate of the timecodes: 23.976, 24, 25, 29.97, 30, 50, 59.94, 60. | |
| hits | Yes | The moments the music must land on: [{time_s} (seconds from the cue start) or {timecode: "01:00:12:08"} (film timecode, with fps and start_timecode), label?, land?}] — land = THIS hit's landing ("downbeat" or "beat"; default: the request's land), e.g. the big cuts on bar lines and a quick accent on a beat. A bare number = {time_s}. | |
| land | No | Land hits on bar lines (default) or on any beat — the default for every hit without its own land. | |
| start_s | No | Alternative: the cue start in seconds of film time (informational when hits are time_s). | |
| bpm_range | No | Allowed tempo range [min, max] (default ±12 % of bpm). | |
| start_timecode | No | Film timecode of the cue's first downbeat (bar 1); hit timecodes are measured from it. | |
| time_signature | No | Meter (default 4/4). |