    /* 214 s at a frame per 100 ms: three sung stretches with quiet between
       them, which is exactly what activeSegments is built to find — 150 s of
       active time, far over its 4 s floor, so the rough pass lays all three
       lines and the first one lands at 10 s */
    if (cmd === "lyrics_vocal_activity") {
        const sung = [[10, 60], [80, 140], [160, 200]];
        const frames = Array.from({ length: 2140 }, (_, i) => (sung.some(([a, b]) => i >= a * 10 && i < b * 10) ? 0.9 : 0.04));
        return new Promise((r) => setTimeout(() => r({ frameMs: 100, frames }), 250));
    }
