Humanised score view (J5c view B for scores)

Needs internet: the MIDI players and the soundfont are loaded from a CDN. Serve this directory over HTTP (the players cannot fetch .mid over file://).

A score render and a humanised re-rendering of it are the J5b/J5c view-B positive pair on the score side: the same notes, played rather than notated. Six rules, all drawn per view from the calibrated ranges. (1) Melody lead: the top note of a chord comes in early -- or late, a third of the time, because real pianists do that too. (2) Chord asynchrony: every other note of the group is scattered around its notated onset. (3) Metrical accent: a weak velocity bonus on downbeats and beats, read straight off the 24-frames-per-quarter score grid. (4) A slow dynamics curve: velocity drifts along a random walk between knots a few seconds apart, and half the segments get a rise-fall arch on top. (5) Articulation: one mode per dynamics segment -- legato, normal, staccato, or hold, the pedal-like mode that stretches a note up to 2.5x and is what gives the real duration ratio's upper tail. (6) Residual velocity jitter on every note. Every timing change is at most 30 ms = 1.44 frames, so latent step t of the view is still step t of the original up to one step boundary -- that is the constraint that makes this a view and not a warp. The x1.5 column multiplies every deviation magnitude (ms, velocity, and the articulation ratios' distance from 1) and is the "wide" set of the calibration study, which is what j5c_flat trains with. What the rules do not produce is a tempo curve: there is no rubato here, and the view-gap gate showed that this is the remaining domain cue between a humanised score and a real performance.

One 1440-frame segment (30 s at 48 fps, 60 quarters on the 24-frames-per-quarter score grid) per piece; the two Beethoven scores start at frame 0, where the paired ASAP performance also starts, the four val scores at 25% of the piece. No score augmentation is applied -- no transposition, no tempo factor, no velocity shift -- so the panels differ by the rule set alone. render_view runs on the full note list and the segment is cropped afterwards, as in training.

dilemma / beethoven_piano_sonatas__01-1

original on-frame 1.000   velocities 1   chord vel std 0.00

human_1.0 on-frame 0.000   velocities 42   chord vel std 5.27   moved 1.000 (mean 8.3 ms, max 24.6 ms)   duration ratio 0.931 (longer 0.336, shorter 0.545)

human_1.5 on-frame 0.000   velocities 34   chord vel std 8.81   moved 1.000 (mean 13.5 ms, max 30.0 ms)   duration ratio 0.914 (longer 0.287, shorter 0.664)

performance — reference, not paired with the score

Original score render

Humanised ×1.0

Humanised ×1.5

Real performance (ASAP)

dilemma / beethoven_piano_sonatas__16-1

original on-frame 1.000   velocities 1   chord vel std 0.00

human_1.0 on-frame 0.000   velocities 36   chord vel std 4.89   moved 1.000 (mean 6.5 ms, max 25.9 ms)   duration ratio 0.866 (longer 0.251, shorter 0.716)

human_1.5 on-frame 0.000   velocities 59   chord vel std 6.92   moved 1.000 (mean 9.6 ms, max 30.0 ms)   duration ratio 0.976 (longer 0.239, shorter 0.494)

performance — reference, not paired with the score

Original score render

Humanised ×1.0

Humanised ×1.5

Real performance (ASAP)

pdmx / pdmx__QmNM8XPBHqdXeNSdWW1azKXde62TKPGNpTkf78rLJv9iuq

original on-frame 1.000   velocities 1   chord vel std 0.00

human_1.0 on-frame 0.000   velocities 38   chord vel std 5.77   moved 1.000 (mean 4.7 ms, max 23.8 ms)   duration ratio 0.772 (longer 0.000, shorter 1.000)

human_1.5 on-frame 0.000   velocities 36   chord vel std 7.81   moved 1.000 (mean 12.2 ms, max 30.0 ms)   duration ratio 0.882 (longer 0.152, shorter 0.821)

Original score render

Humanised ×1.0

Humanised ×1.5

pdmx / pdmx__QmNTApqJceptZisbyajTXkUGu983gahxXouNz5GNNXkS8u

original on-frame 1.000   velocities 1   chord vel std 0.00

human_1.0 on-frame 0.000   velocities 19   chord vel std 4.61   moved 1.000 (mean 4.8 ms, max 24.6 ms)   duration ratio 1.002 (longer 0.403, shorter 0.375)

human_1.5 on-frame 0.000   velocities 30   chord vel std 5.72   moved 1.000 (mean 9.5 ms, max 30.0 ms)   duration ratio 0.945 (longer 0.319, shorter 0.611)

Original score render

Humanised ×1.0

Humanised ×1.5

classic / classic__albeniz__alb_esp6_format0

original on-frame 0.894   velocities 39   chord vel std 5.42

human_1.0 on-frame 0.000   velocities 61   chord vel std 9.60   moved 1.000 (mean 10.0 ms, max 30.0 ms)   duration ratio 0.927 (longer 0.240, shorter 0.587)

human_1.5 on-frame 0.000   velocities 85   chord vel std 10.66   moved 1.000 (mean 15.4 ms, max 30.0 ms)   duration ratio 0.920 (longer 0.369, shorter 0.513)

Original score render

Humanised ×1.0

Humanised ×1.5

hfclassical / hfclassical__albeniz-espana_op_165

original on-frame 1.000   velocities 48   chord vel std 8.14

human_1.0 on-frame 0.000   velocities 66   chord vel std 12.52   moved 1.000 (mean 9.2 ms, max 30.0 ms)   duration ratio 1.112 (longer 0.668, shorter 0.082)

human_1.5 on-frame 0.000   velocities 64   chord vel std 15.20   moved 1.000 (mean 13.5 ms, max 30.0 ms)   duration ratio 1.009 (longer 0.348, shorter 0.434)

Original score render

Humanised ×1.0

Humanised ×1.5