# Audio pacing experiments — summary & learnings

Goal: make narration breathe — esp. **lists feeling rushed** — and add pauses between sections.
Voice: **Theo Silk** (`UmQN7jS1Ee8B1czsUtQh`), ElevenLabs **`eleven_multilingual_v2`**. Base pace −20%.

Test bed: the *First Talk · Knowing Each One Three Ways* section (a dense double-list that rattled).

## Samples (numbered by creation time; highest = newest)

| # | what it tested | raw dur | result |
|---|---|---|---|
| 01 | raw master, no slowdown | 69.8s | reference |
| 02–05 | atempo −20 / −25 / −30 / −35% | 83.7→94.1s | **speed works** (the only thing that did, until 11) |
| 06 | preserve whitespace / newlines | 68.8s | **no effect** |
| 07–08 | `<break time>` tags (model honors) | 67.8s | **no effect** |
| 09 | full-stop punctuation (semicolons → periods) | 67.1s | **no effect** |
| 10 | alex variant, breaks ignored | 68.2s | no effect |
| **11** | **alex variant, breaks → REAL spliced silence** | **84.1s** | **✅ genuine breathing — the keeper** |

`.mdx` variants are named by the sample(s) they produced (e.g. `10-11-...alex-real-silence-breaks.mdx`).

## Learnings

1. **`eleven_multilingual_v2` bakes its own cadence.** It does **not** add pauses from whitespace,
   newlines, `<break>` tags, or extra punctuation — proven across samples 06–10 (all within
   run-to-run noise of the 69.8s baseline). Text-driven pausing is a **v3** capability, and v3 is
   not prod-ready.
2. **Only two levers physically change pacing on v2:** (a) `atempo` time-stretch, and
   (b) **real silence we splice in ourselves.**
3. **The win (sample 11):** treat `<break time="Xs" />` as an *instruction to us*, not the model.
   `generate-audio.ts` now splits the text at each `<break>`, TTS-renders each span separately, and
   concatenates with **X seconds of real silence** between them. Deterministic, author-placed,
   bakes into the section mp3 (so web + audiobook both get it). No extra chapters, no fragile
   mid-clip splice.
4. **Tuning notes:** because each span is a separate TTS call, ElevenLabs adds a little head/tail
   padding per span, so effective gaps run a touch longer than the tag value — dial `time` down to
   taste (≈0.4–0.6s reads well). Watch for tonal seams on very short spans; merge breaks if so.
5. The pipeline keeps raw `orig-*` masters, so **re-slowing any section to any pace is free**
   (no new TTS) — `atempo` tuning costs nothing.

## How to use

In a section's narration text, place `<break time="0.6s" />` where a pause belongs (e.g. between
list items). Regenerate; the splicer does the rest. Then `pnpm render-english-audio <slug>` applies
the −20% / −7.5% renditions and patches the manifest.
