How to calculate speech rate in words per minute

Speech rate is words spoken divided by speaking time in minutes. Word timestamps from speech-to-text measure both, per recording or per sentence.

5 min readSume
All posts

To calculate speech rate, count the words spoken and divide by the speaking time in minutes: 390 words in 2 minutes 30 seconds is 390 ÷ 2.5 = 156 words per minute (WPM). Word timestamps give you both numbers: transcribe the recording, count the word tokens, and time the span from the first word's start to the last word's end. Sume STT 1.0 always returns word timings: a words[] array with each word's start and end in seconds.

The formula is plain arithmetic. The timing fields come from the OpenAPI document behind the Sume API reference, which the API reference docs page names as the source for exact request and response shapes, read on 2026-09-27.

Which time should I divide by?

That depends on whether pauses count. Pick one definition, say which one you used, and apply it to every recording you compare:

Timing fields from the Sume API reference, read 2026-09-27.
RateDivide the word count byPauses
Overall rateThe file's full durationCounted, with any silence before the first word and after the last
Speaking rateThe first word's start to the last word's endPauses between words counted
Articulation rateThe speaking span minus pauses longer than a cutoff you chooseLong pauses left out
Sentence rateOne sentence's first word start to its last word endOnly pauses inside that sentence

How do I get word timestamps for a recording?

Transcribe it with a speech-to-text API that returns word timings. Sume STT 1.0 takes the recording's public HTTPS URL at POST /v1/stt-1.0/transcribe and always returns word timings, with no flag to turn on; Speech-to-text API with word timestamps shows the request. The result fields you need:

  • words[]: each token's word, start, and end, in seconds from the audio start, ordered by start.
  • words[].type: when supplied, the token's class, for example word or spacing. Count only word tokens.
  • segments[]: sentences with text, start, end, and duration_seconds, returned when you send segmentation: { "mode": "sentence" }.
  • One request covers up to 10 minutes of audio (duration_seconds 1–600), billed at $0.01 per audio minute plus a 5.5% agent fee by default on API pricing. For longer recordings, see Transcribe long audio files.

How do I calculate words per minute from the timestamps?

Keep the word tokens, then divide. This sketch computes the speaking rate and an articulation rate that leaves out pauses longer than one second. The one-second cutoff is a choice, not a standard, so state yours when you report a rate.

Decide how to count numbers, contractions, and filler words, and count them the same way every time. In languages that don't put spaces between words, count characters or syllables instead.

// result = data.result from GET /v1/jobs/{id}/result
const words = result.words.filter((w) => (w.type ?? "word") === "word");
const first = words[0];
const last = words[words.length - 1];
const spanMinutes = (last.end - first.start) / 60;
const speakingWpm = words.length / spanMinutes;

// Articulation rate: leave out gaps longer than 1 second between words
let pauseSeconds = 0;
for (let i = 1; i < words.length; i++) {
  const gap = words[i].start - words[i - 1].end;
  if (gap > 1) pauseSeconds += gap;
}
const articulationWpm = words.length / (spanMinutes - pauseSeconds / 60);

How do I get the rate of each sentence?

Ask for sentence segments and count the words inside each one. Segments are gapless, since each one's end equals the next one's start, so a segment's duration_seconds can include the silence between sentences. For the pace of the sentence itself, time it from its first word's start to its last word's end:

const sentenceRates = result.segments.map((s) => {
  const inside = words.filter((w) => w.start >= s.start && w.start < s.end);
  if (inside.length < 2) return { text: s.text, wpm: null };
  const minutes = (inside[inside.length - 1].end - inside[0].start) / 60;
  return { text: s.text, wpm: inside.length / minutes };
});

Can I work out speech rate without a transcript?

Yes, for a script read as written: count the script's words, time the recording from the first word to the last, and divide. The count drifts when the speaker ad-libs or skips lines, which is where a transcript's word timings help.

To go the other way and estimate how long a script will run before anyone records it, see how many words fit in 60 seconds.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume