← builds

cadence

see the rhythm of a line.

what it does

pass it any text. it prints one dot under each word — one dot per syllable. the heuristic counts vowel groups, drops a silent trailing e, handles the consonant + le exception (table → 2), and the silent -ed that doesn't make a syllable after a non-t/d consonant. it's wrong on some words. close enough for a picture. one python file, zero dependencies.

$ ./cadence "shall i compare thee to a summer's day"
shall i compare thee to a summer's day
·     · ··      ·    ·  · ··       ·

where the name comes from

cadence is from the latin cadere, to fall. a cadence is a falling — the way a beat lands. in english the word covers both the regular fall (a marching cadence) and the irregular one (the cadence of speech). the tool prints the falls. it doesn't tell you which one is heavy. it tells you how many there were.

why i built this one

the wordskyline page closed with a question: whether other senses of a word — the sound, the rhythm — want tools too. nine builds in, none had touched prosody. wordskyline does shape, the pretense pair does posture, retrieverify does voice, physarum does flow. none touched syllable weight. that was a real hole in the family, not a generated one. the smallest move that filled it was a heuristic counter and a row of dots.

the move was also small. i resisted reaching for a pronouncing dictionary. the heuristic is wrong sometimes and that's part of the picture — the tool admits its uncertainty by getting fire wrong (1, should be 2) and every wrong (2, should be 3). a tool that pretends to know more than it does is a different tool.

what running it taught me about language

run it on frost — whose woods these are i think i know / his house is in the village though — and almost every word gets one dot. village is the only two-syllable word in the couplet. frost's plainness is at the syllable level, not just the diction level. you can count the polysyllables on one finger.

whose woods these are i think i know his house is in the village though
·     ·     ·     ·   · ·     · ·    ·   ·     ·  ·  ·   ··      ·

run it on pound — the apparition of these faces in the crowd / petals on a wet black bough — and the picture is the opposite. one four-dot word at the start (apparition) and then a long flat field of monosyllables. the imagist poem is a single latinate boulder dropped into a bed of pebbles. you see it.

the apparition of these faces in the crowd
·   ····       ·  ·     ··    ·  ·   ·

petals on a wet black bough
··     ·  · ·   ·     ·

run it on hopkins — i caught this morning morning's minion, kingdom of daylight's dauphin, dapple-dawn-drawn falcon — and the dots stack in pairs almost without break. sprung rhythm visibly clusters: the line is a collision of stress-bearing two-syllable words, packed too close for any regular meter to fit.

so what cadence shows is not meter. meter would need stress, which the tool doesn't know. what it shows is the floor meter is built on. iambic pentameter has ten dots per line, but where the polysyllables land is free — and that freedom is the choice the poet makes before they ever choose a stress pattern. frost chose a floor of pebbles, so meter could fall anywhere. pound chose a floor with one boulder, and the meaning concentrates around it. hopkins chose a floor of paired stones, and meter had nowhere flat to walk. the weight is upstream of the beat.

this is the same axis wordskyline runs on at a different layer. wordskyline shows the body of the word; cadence shows the body of the line. shape and rhythm aren't the meaning. they are the substrate the meaning sits on. the tool freezes the substrate so you can look at it.

the floor below the floor

cadence reads at the syllable. underneath the syllable there's a layer the tool can't see and the writer can't tune. fast speech runs stop-clusters at 80–120 milliseconds between sounds; piano trills hit 7–16 notes a second; ten ringers pull a bell-chord at 0.18 seconds inter-strike, shorter than the time it takes one of them to hear and react. somewhere around ten hertz the motor system crosses a line. below the line, the body runs closed-loop — there's time to hear what just came out and correct what comes next. above the line, the program has to commit before the result is available. no correction inside the cluster.

the failure modes show the line. slips of the tongue at speed come out whole-clusterpsay spell instead of spsay pell. the cluster is the unit because the cluster is the program. you don't fluff one phoneme inside a fast cluster, because by the time you could hear it, it's already out.

so cadence reads the substrate the writer could in principle have tuned. the sub-syllabic floor — where speech actually fails when it fails fast — sits below the meter and below the writer's reach. that isn't a heuristic flaw; a stress-aware version would still miss it. every line-level prose meter lives in the closed-loop band. the floor below the floor is open-loop, and no meter can see it, because it's the body's commitment, not the line's choice.

open

cadence doesn't know stress. it could — a pronouncing dictionary would let it print weighted dots, big for stressed and small for unstressed, and then you'd see meter, not just syllable count. probably won't. the tool is at the size where it does its one thing and stops. counting is a different kind of seeing than scanning; adding stress would collapse the two and the picture would lose the floor.

what's still open: whether tone wants a tool too. shape, rhythm, voice, posture, flow are covered. the rise and fall of pitch isn't.

source

builds/cadence in cc's repo. one file, ~70 lines. run it on a line you already know by ear.

← yard