From 4c721e1b101b8d1d0a5106bedec22af5ed9930e8 Mon Sep 17 00:00:00 2001 From: "prompt.ac/@jeffrey" Date: Tue, 18 Aug 2026 14:44:51 -0400 Subject: [PATCH] loner: "in" half a beat sooner without losing up's peak, and the pickup kick returns MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @jeffrey: "can 'in' start a half beat sooner · also lets have the prelude kick sound too · a kick before the first beat i mean". Moving "in" earlier means shortening "up", and shortening "up" moves its peak — the offset scales with the stretch, so the peak that had been placed on beat 7 slid to 6.92 as soon as up lost half a beat. Solved it rather than iterated: the peak sits about 0.315 of the slot in, so with the slot ending at 8.29 the duration that keeps the peak on 7 is 1.88, which puts curled at 2.41. Verified — in starts 8.29, up peaks at 6.96. The pickup kick comes back, at 0.019 s against a beat 0 of 0.510 — so there is a kick under her /s/ before the downbeat. --- pop/loner/bin/halo3.py | 2 +- pop/loner/c/loner-chart.h | 46 ++++++++-------- pop/loner/c/lonerremix.c | 4 +- pop/loner/vox4/.chart.json | 98 +++++++++++++++++------------------ pop/loner/vox4/.manifest.json | 4 +- 5 files changed, 78 insertions(+), 76 deletions(-) diff --git a/pop/loner/bin/halo3.py b/pop/loner/bin/halo3.py index 82e081efc..47b7f9b65 100644 --- a/pop/loner/bin/halo3.py +++ b/pop/loner/bin/halo3.py @@ -252,7 +252,7 @@ CHART = { # 0.71 beats into its slot, so the slot has # to open at 6.29 for the peak to land on # the bar 1 beat 4 line. - "durs": { 0: 2.0, 1: 2.0, 2: 2.29, 3: 2.5, + "durs": { 0: 2.0, 1: 2.0, 2: 2.41, 3: 1.88, # "my" a beat sooner: the warp is one # sequential frame map, so units cannot # truly overlap — "in" simply ends where diff --git a/pop/loner/c/loner-chart.h b/pop/loner/c/loner-chart.h index e690ab6e3..283bb06cf 100644 --- a/pop/loner/c/loner-chart.h +++ b/pop/loner/c/loner-chart.h @@ -15,28 +15,28 @@ typedef struct { const char *name; double leadIn; double beats; static const ChartNote w_whole_line_notes[] = { { 0.00, 2.00, 7 }, { 2.00, 2.00, 5 }, - { 4.00, 2.29, 3 }, - { 6.29, 2.50, 2 }, - { 8.79, 2.50, 0 }, - { 11.29, 1.50, 5 }, - { 12.79, 2.00, 2 }, - { 14.79, 2.00, -2 }, - { 16.79, 2.00, -5 }, - { 18.79, 4.00, 12 }, - { 22.79, 3.00, 10 }, - { 25.79, 3.00, 5 }, - { 28.79, 4.00, 2 }, - { 32.79, 2.00, 3 }, - { 34.79, 2.00, 2 }, - { 36.79, 2.00, 0 }, - { 38.79, 2.00, -2 }, - { 40.79, 2.00, 7 }, - { 42.79, 2.50, 5 }, - { 45.29, 2.50, 3 }, - { 47.79, 2.00, 5 }, - { 49.79, 4.00, 7 }, - { 53.79, 4.00, 3 }, - { 57.79, 3.00, 3 }, + { 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 }, }; static const ChartNote w_sitting_curled_notes[] = { { 0.00, 3.00, 6 }, @@ -93,7 +93,7 @@ static const ChartNote w_n_for_time_to_pass_notes[] = { }; static const ChartPhrase CHART[] = { - { "w-whole-line", 0.510, 60.79, 24, w_whole_line_notes }, + { "w-whole-line", 0.510, 60.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 index ad3e3f5eb..d74b3f172 100644 --- a/pop/loner/c/lonerremix.c +++ b/pop/loner/c/lonerremix.c @@ -642,7 +642,9 @@ int main(void) { // 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. - // (no kick on the pickup — the /s/ has it to itself) + // 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); 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 index 669718e8b..8c8c2f4e2 100644 --- a/pop/loner/vox4/.chart.json +++ b/pop/loner/vox4/.chart.json @@ -1,59 +1,59 @@ { "w-whole-line": { "leadIn": 0.51, - "beats": 60.79, + "beats": 60.29, "voiced": [ [ -0.0407, - 8.7433 + 8.2452 ], [ - 8.7942, - 13.298 + 8.2858, + 12.7998 ], [ - 13.3183, - 14.7112 + 12.8202, + 14.213 ], [ - 14.7417, - 18.6152 + 14.2435, + 18.117 ], [ - 18.7778, - 25.3963 + 18.2797, + 24.8982 ], [ - 25.742, - 32.6452 + 25.2438, + 32.147 ], [ - 32.7468, - 40.443 + 32.2487, + 39.9448 ], [ - 40.5548, - 42.6593 + 40.0567, + 42.1612 ], [ - 42.7305, - 44.6825 + 42.2323, + 44.1843 ], [ - 44.774, - 47.7325 + 44.2758, + 47.2343 ], [ - 47.7732, - 49.6133 + 47.2648, + 49.1152 ], [ - 49.654, - 57.3807 + 49.1558, + 56.8825 ], [ - 57.5637, - 61.5998 + 57.0655, + 61.1017 ] ], "notes": [ @@ -73,153 +73,153 @@ }, { "beat": 4.0, - "dur": 2.29, + "dur": 2.41, "st": 3, "t": "curled", "lead": 0.0 }, { - "beat": 6.29, - "dur": 2.5, + "beat": 6.41, + "dur": 1.88, "st": 2, "t": "up", "lead": 0.0 }, { - "beat": 8.79, + "beat": 8.29, "dur": 2.5, "st": 0, "t": "in", "lead": 0.0 }, { - "beat": 11.29, + "beat": 10.79, "dur": 1.5, "st": 5, "t": "my", "lead": 0.0 }, { - "beat": 12.79, + "beat": 12.29, "dur": 2.0, "st": 2, "t": "self", "lead": 0.0 }, { - "beat": 14.79, + "beat": 14.29, "dur": 2.0, "st": -2, "t": "i", "lead": 0.0 }, { - "beat": 16.79, + "beat": 16.29, "dur": 2.0, "st": -5, "t": "think", "lead": 0.0 }, { - "beat": 18.79, + "beat": 18.29, "dur": 4.0, "st": 12, "t": "of", "lead": 0.0203 }, { - "beat": 22.79, + "beat": 22.29, "dur": 3.0, "st": 10, "t": "a", "lead": 0.0 }, { - "beat": 25.79, + "beat": 25.29, "dur": 3.0, "st": 5, "t": "stone", "lead": 0.1017 }, { - "beat": 28.79, + "beat": 28.29, "dur": 4.0, "st": 2, "t": "just", "lead": 0.0 }, { - "beat": 32.79, + "beat": 32.29, "dur": 2.0, "st": 3, "t": "wait", "lead": 0.0813 }, { - "beat": 34.79, + "beat": 34.29, "dur": 2.0, "st": 2, "t": "ing", "lead": 0.0 }, { - "beat": 36.79, + "beat": 36.29, "dur": 2.0, "st": 0, "t": "ve", "lead": 0.0 }, { - "beat": 38.79, + "beat": 38.29, "dur": 2.0, "st": -2, "t": "ry", "lead": 0.0 }, { - "beat": 40.79, + "beat": 40.29, "dur": 2.0, "st": 7, "t": "pa", "lead": 0.0 }, { - "beat": 42.79, + "beat": 42.29, "dur": 2.5, "st": 5, "t": "tient", "lead": 0.122 }, { - "beat": 45.29, + "beat": 44.79, "dur": 2.5, "st": 3, "t": "ly", "lead": 0.0 }, { - "beat": 47.79, + "beat": 47.29, "dur": 2.0, "st": 5, "t": "for", "lead": 0.0 }, { - "beat": 49.79, + "beat": 49.29, "dur": 4.0, "st": 7, "t": "time", "lead": 0.0 }, { - "beat": 53.79, + "beat": 53.29, "dur": 4.0, "st": 3, "t": "to", "lead": 0.0 }, { - "beat": 57.79, + "beat": 57.29, "dur": 3.0, "st": 3, "t": "pass", diff --git a/pop/loner/vox4/.manifest.json b/pop/loner/vox4/.manifest.json index 7b05d8374..296a0ec6e 100644 --- a/pop/loner/vox4/.manifest.json +++ b/pop/loner/vox4/.manifest.json @@ -124,9 +124,9 @@ 23.97 ] ], - "beats": 60.79, + "beats": 60.29, "renders": { - "lead": 30.805 + "lead": 30.56 }, "snaps": [ "curled +65ms", -- 2.51.2