Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | /** * ln(2) Demo Narration Segments: "The Bouncing Ball" * * Pure data file — no React. Each segment maps a revealProgress range * to a TTS utterance and a minimum animation duration. * * Progress ranges are derived from ln2Demo.ts's phase constants: * * Seg 0 0.00–0.08 Place — ball fades in at 0 * Seg 1 0.08–0.35 First bounces — bounces 1–4 with subdivision visual * Seg 2 0.35–0.55 More bounces — bounces 5–12, faster * Seg 3 0.55–0.72 Cascade — accelerating bounces * Seg 4 0.72–0.86 Converge — spiral closes * Seg 5 0.86–1.00 Reveal — star, label, celebration */ import type { DemoNarrationSegment } from './useConstantDemoNarration' /** Shared voice direction for the ln(2) demo narrator. */ export const LN2_DEMO_TONE = 'You are a warm, curious guide for a really smart 5-year-old. ' + 'Help the child notice the PATTERN in the bouncing — each jump is ' + 'a fraction of the first: the whole, then half, a third, a quarter. ' + 'Build wonder about where the ball gets trapped. ' + 'Connect to doubling: ln(2) is the special number hiding inside every time something doubles.' export const LN2_DEMO_SEGMENTS: DemoNarrationSegment[] = [ // ── Place ─────────────────────────────────────────────────────────── { ttsText: 'Look! Here comes a little ball. ' + "It's sitting right on zero, ready to bounce!", startProgress: 0.0, endProgress: 0.08, animationDurationMs: 3500, scrubberLabel: 'The ball appears', }, // ── First bounces ────────────────────────────────────────────────── { ttsText: 'A big bounce to the right — all the way to ONE! ' + 'Now it bounces back, but only HALF as far. See? Half of the first jump. ' + 'Forward again — only a THIRD as far this time! ' + 'And back — just a QUARTER of the first jump. ' + 'The whole thing, then half, a third, a quarter... see the pattern?', startProgress: 0.08, endProgress: 0.35, animationDurationMs: 14000, scrubberLabel: 'The pattern', }, // ── More bounces ─────────────────────────────────────────────────── { ttsText: 'A fifth, a sixth, a seventh — ' + 'the jumps keep following the same pattern, and each one is smaller! ' + 'Back and forth, tighter and tighter.', startProgress: 0.35, endProgress: 0.55, animationDurationMs: 8000, scrubberLabel: 'Tighter and tighter', }, // ── Cascade ──────────────────────────────────────────────────────── { ttsText: 'The ball keeps overshooting and coming back, ' + "but it's getting trapped — it can't escape! " + 'Every bounce pulls it closer to one special spot.', startProgress: 0.55, endProgress: 0.72, animationDurationMs: 6000, scrubberLabel: 'Getting trapped', }, // ── Converge ────────────────────────────────────────────────────── { ttsText: 'Can you even see the bounces now? ' + 'The ball is spiraling in, faster and faster — ' + "it can't go anywhere else!", startProgress: 0.72, endProgress: 0.86, animationDurationMs: 6000, scrubberLabel: 'Spiraling in', }, // ── Reveal ───────────────────────────────────────────────────────── { ttsText: 'That spot is called the natural log of two! ' + "It's about zero point six nine three. " + 'Whenever something DOUBLES — like one cookie becoming two — ' + 'this number is hiding inside, telling you how fast it grew.', startProgress: 0.86, endProgress: 1.0, animationDurationMs: 7000, scrubberLabel: 'Natural log of two', }, ] |