Analyze Feel
analyze_feelMeasure per-note timing and level feel against a reference to diagnose why a MIDI part sounds mechanical, stiff, or quantized, including beat offsets, offbeat placement, and level steps.
Instructions
The per-note feel of a part: what makes a draft "sound MIDI" or "mechanical", measured on a beat line that
follows the record (a drifting or rubato take stays locked). For every slot of bars [a, b] (the beats, and the
8ths (per_beat=2) or 16ths (per_beat=4) spread evenly between the followed beats) it reads the onset within
window_ms in band ([lo, hi] Hz, default [600, 4000]) and the slot's peak level there, then prints: the timing
spread (sd, ms) of the notes between the beats with each beat's own offset taken out; where the offbeat 8th sits
as a share of the beat (0.500 = even); the mean level by metric position against its bar's mean (beat 1, 2, ...,
and the e, &, a); the sd of note-to-note level steps; the beats it could not follow. against='ref' (with
source='render' or 'track:') prints both columns and the differences, and names the ones that read as
MIDI-like. Reach for it when a draft sounds MIDI, mechanical, robotic, stiff or quantized against a reference,
or to check feel_from_ref's result. Read a stem (ref:, track:) when the part shares its band with
others.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | ||
| bars | Yes | ||
| source | Yes | ||
| against | No | ||
| project | Yes | ||
| per_beat | No | ||
| window_ms | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |