diff --git a/pop/loner/bin/halo3.py b/pop/loner/bin/halo3.py --- a/pop/loner/bin/halo3.py +++ b/pop/loner/bin/halo3.py @@ -216,7 +216,12 @@ # just") and after to. The chart used to # have no rests at all, so every one of # those breaths was being stretched into # the note before it. - "lead": 1.0, # the /s/ of sitting, as a pickup + "lead": 0.0, # no pickup — @jeffrey: "remove the + # prelude beat and space so it just + # starts immediately". Her /s/ still + # plays, 1:1, in the few frames before + # the downbeat rather than stretched + # across a whole beat of air. # curled 2 (one shorter than 3, and 0.94× — # essentially her own speed): curled + up now # fill bar 1 exactly, 4→8. The beat goes into @@ -263,7 +268,7 @@ # to halfway past beat 3 — in takes the # half beat (2.0, 1.23×) and my gives it # back (1.5, 1.07×), so self keeps bar 3 # and nothing downstream moves. - 4: 2.5, 5: 1.5, 6: 2.0, + 4: 1.5, 5: 1.5, 6: 2.0, # think 1 (1.17×, her own speed — at 2 # it was a 2.3× held tone), so OF keeps # its 4 beats at 1.01×, her real octave, diff --git a/pop/loner/bin/timeline.py b/pop/loner/bin/timeline.py --- a/pop/loner/bin/timeline.py +++ b/pop/loner/bin/timeline.py @@ -225,7 +225,7 @@ # the downbeat reads pink and the others step through the paper palette; # every column is numbered under the bar label. Now a note can be named # out loud — "bar 3 beat 3" — and found by eye without counting. # (BEAT_TINT comes from the theme block above.) -for b in range(-1, TOTAL_BEATS + 1): # -1 is the pickup beat +for b in range(0, TOTAL_BEATS + 1): x, xn = X(b), X(b + 1) d.rectangle([x, ROLL_TOP, xn - 1, ROLL_BOT], fill=BEAT_TINT[b % 4]) if b % 4 == 0: @@ -247,7 +247,7 @@ d.text((X(0) - 84, y - 12), note_name(st), font=f_note, fill=SOFT) # kick lane KY0, KY1 = ROLL_BOT + 40, ROLL_BOT + 104 -for b in range(-1, KICK_BEATS): +for b in range(0, KICK_BEATS): x = X(b) d.rounded_rectangle([x, KY0, x + PXB - 4, KY1], 6, fill=KICK_FILL) d.text((X(0) - 84, KY0 + 8), "kick", font=f_note, fill=BLUE) @@ -420,7 +420,7 @@ # was the faintest on screen. Put it back on top. shadowed(d2, (lab[0] - px, lab[1]), txt, f_word, LABEL_ON) # kick flash kb = int(math.floor(beat)) - if -1 <= kb < KICK_BEATS and (beat - kb) < 0.22: + if 0 <= kb < KICK_BEATS and (beat - kb) < 0.22: x = X(kb) - px d2.rounded_rectangle([x, KY0, x + PXB - 4, KY1], 6, fill=PINK) # live timecode — song clock + musical address, updating every frame diff --git a/pop/loner/c/loner-chart.h b/pop/loner/c/loner-chart.h --- a/pop/loner/c/loner-chart.h +++ b/pop/loner/c/loner-chart.h @@ -17,26 +17,26 @@ { 0.00, 2.00, 7 }, { 2.00, 2.00, 5 }, { 4.00, 2.41, 3 }, { 6.41, 1.88, 2 }, - { 8.29, 2.50, 0 }, - { 10.79, 1.50, 5 }, - { 12.29, 2.00, 2 }, - { 14.29, 2.00, -2 }, - { 16.29, 2.00, -5 }, - { 18.29, 4.00, 12 }, - { 22.29, 3.00, 10 }, - { 25.29, 3.00, 5 }, - { 28.29, 4.00, 2 }, - { 32.29, 2.00, 3 }, - { 34.29, 2.00, 2 }, - { 36.29, 2.00, 0 }, - { 38.29, 2.00, -2 }, - { 40.29, 2.00, 7 }, - { 42.29, 2.50, 5 }, - { 44.79, 2.50, 3 }, - { 47.29, 2.00, 5 }, - { 49.29, 4.00, 7 }, - { 53.29, 4.00, 3 }, - { 57.29, 3.00, 3 }, + { 8.29, 1.50, 0 }, + { 9.79, 1.50, 5 }, + { 11.29, 2.00, 2 }, + { 13.29, 2.00, -2 }, + { 15.29, 2.00, -5 }, + { 17.29, 4.00, 12 }, + { 21.29, 3.00, 10 }, + { 24.29, 3.00, 5 }, + { 27.29, 4.00, 2 }, + { 31.29, 2.00, 3 }, + { 33.29, 2.00, 2 }, + { 35.29, 2.00, 0 }, + { 37.29, 2.00, -2 }, + { 39.29, 2.00, 7 }, + { 41.29, 2.50, 5 }, + { 43.79, 2.50, 3 }, + { 46.29, 2.00, 5 }, + { 48.29, 4.00, 7 }, + { 52.29, 4.00, 3 }, + { 56.29, 3.00, 3 }, }; static const ChartNote w_sitting_curled_notes[] = { { 0.00, 3.00, 6 }, @@ -93,7 +93,7 @@ { 4.00, 1.50, 3 }, }; static const ChartPhrase CHART[] = { - { "w-whole-line", 0.510, 60.29, 24, w_whole_line_notes }, + { "w-whole-line", 0.040, 59.29, 24, w_whole_line_notes }, { "w-sitting-curled", 0.020, 11.00, 5, w_sitting_curled_notes }, { "w-i-think", 0.020, 3.50, 2, w_i_think_notes }, { "w-of-a-stone", 0.000, 8.00, 3, w_of_a_stone_notes }, diff --git a/pop/loner/c/lonerremix.c b/pop/loner/c/lonerremix.c --- a/pop/loner/c/lonerremix.c +++ b/pop/loner/c/lonerremix.c @@ -642,9 +642,7 @@ // better head on the beat in this monitor video?" Four on the // floor alone tells you where the bar is but not where you are // inside it; offbeat air-hats give the 8ths, and quiet 16th ticks // give the subdivision the words are actually being placed on. - // a kick on the PICKUP beat — @jeffrey: "lets have the prelude - // kick sound too · a kick before the first beat i mean" - kick(fmax(0.0, off - BEAT), 0.95); + // no pickup kick — there is no pickup beat any more for (int bar = 0; bar < kickBars; bar++) { double t = off + at(bar); for (int b = 0; b < 4; b++) kick(t + b * BEAT, 0.95); diff --git a/pop/loner/vox4/.chart.json b/pop/loner/vox4/.chart.json --- a/pop/loner/vox4/.chart.json +++ b/pop/loner/vox4/.chart.json @@ -1,7 +1,7 @@ { "w-whole-line": { - "leadIn": 0.51, - "beats": 60.29, + "leadIn": 0.04, + "beats": 59.29, "voiced": [ [ -0.0407, @@ -9,51 +9,51 @@ 8.2452 ], [ 8.2858, - 12.7998 + 11.7933 ], [ - 12.8202, - 14.213 + 11.8137, + 13.2065 ], [ - 14.2435, - 18.117 + 13.237, + 17.1207 ], [ - 18.2797, - 24.8982 + 17.2833, + 23.8917 ], [ - 25.2438, - 32.147 + 24.2373, + 31.1507 ], [ - 32.2487, - 39.9448 + 31.2523, + 38.9485 ], [ - 40.0567, - 42.1612 + 39.0603, + 41.1547 ], [ - 42.2323, - 44.1843 + 41.2258, + 43.1778 ], [ - 44.2758, - 47.2343 + 43.2693, + 46.2278 ], [ - 47.2648, - 49.1152 + 46.2685, + 48.1188 ], [ - 49.1558, - 56.8825 + 48.1595, + 55.8862 ], [ - 57.0655, - 61.1017 + 56.0692, + 60.1053 ] ], "notes": [ @@ -87,139 +87,139 @@ "lead": 0.0 }, { "beat": 8.29, - "dur": 2.5, + "dur": 1.5, "st": 0, "t": "in", "lead": 0.0 }, { - "beat": 10.79, + "beat": 9.79, "dur": 1.5, "st": 5, "t": "my", "lead": 0.0 }, { - "beat": 12.29, + "beat": 11.29, "dur": 2.0, "st": 2, "t": "self", "lead": 0.0 }, { - "beat": 14.29, + "beat": 13.29, "dur": 2.0, "st": -2, "t": "i", "lead": 0.0 }, { - "beat": 16.29, + "beat": 15.29, "dur": 2.0, "st": -5, "t": "think", "lead": 0.0 }, { - "beat": 18.29, + "beat": 17.29, "dur": 4.0, "st": 12, "t": "of", "lead": 0.0203 }, { - "beat": 22.29, + "beat": 21.29, "dur": 3.0, "st": 10, "t": "a", "lead": 0.0 }, { - "beat": 25.29, + "beat": 24.29, "dur": 3.0, "st": 5, "t": "stone", "lead": 0.1017 }, { - "beat": 28.29, + "beat": 27.29, "dur": 4.0, "st": 2, "t": "just", "lead": 0.0 }, { - "beat": 32.29, + "beat": 31.29, "dur": 2.0, "st": 3, "t": "wait", "lead": 0.0813 }, { - "beat": 34.29, + "beat": 33.29, "dur": 2.0, "st": 2, "t": "ing", "lead": 0.0 }, { - "beat": 36.29, + "beat": 35.29, "dur": 2.0, "st": 0, "t": "ve", "lead": 0.0 }, { - "beat": 38.29, + "beat": 37.29, "dur": 2.0, "st": -2, "t": "ry", "lead": 0.0 }, { - "beat": 40.29, + "beat": 39.29, "dur": 2.0, "st": 7, "t": "pa", "lead": 0.0 }, { - "beat": 42.29, + "beat": 41.29, "dur": 2.5, "st": 5, "t": "tient", "lead": 0.122 }, { - "beat": 44.79, + "beat": 43.79, "dur": 2.5, "st": 3, "t": "ly", "lead": 0.0 }, { - "beat": 47.29, + "beat": 46.29, "dur": 2.0, "st": 5, "t": "for", "lead": 0.0 }, { - "beat": 49.29, + "beat": 48.29, "dur": 4.0, "st": 7, "t": "time", "lead": 0.0 }, { - "beat": 53.29, + "beat": 52.29, "dur": 4.0, "st": 3, "t": "to", "lead": 0.0 }, { - "beat": 57.29, + "beat": 56.29, "dur": 3.0, "st": 3, "t": "pass", diff --git a/pop/loner/vox4/.manifest.json b/pop/loner/vox4/.manifest.json --- a/pop/loner/vox4/.manifest.json +++ b/pop/loner/vox4/.manifest.json @@ -1,7 +1,7 @@ { "w-whole-line": { "slice": "f-whole-line", - "lead_in": 0.51, + "lead_in": 0.04, "spans": [ [ "sitting\u00b7a", @@ -124,9 +124,9 @@ 23.0, 23.97 ] ], - "beats": 60.29, + "beats": 59.29, "renders": { - "lead": 30.56 + "lead": 29.6 }, "snaps": [ "curled +65ms",