← All work
MAI-Voice-Lab — step 1: catalog
1Forty-six voices, most carrying eighteen style variants. Auditioning that space by ear, one clip at a time, is where voice evaluation usually goes wrong — you remember the last thing you heard, not the best.

MAI-Voice-Lab

Prosody judgments deserve evidence, not impressions.

Role
Sole designer and engineer
Stack
Node · Azure Speech · Web Audio · TypeScript
Dates
2026

Choosing a synthetic voice is usually done by listening to candidates one after another and picking the one that felt best. That method has a known failure: you are comparing each clip against your memory of the last one, and memory for prosody is short and biased toward recency. With 46 voices carrying up to 18 style variants each, the space is far past what sequential listening can hold.

The decision

Columns, not a playlist. Every candidate is synthesized from the same script and laid out side by side with its F0 contour, waveform with RMS envelope, and spectrogram stacked in the same order at the same scale. The comparison stops being “which did I prefer” and becomes “which pitch track does the thing I want”.

Two smaller decisions matter more than they look:

One script across all columns. If the copy varies, the difference you hear is the copy. Style and styleDegree vary per column; the words do not.

The cost is in the toolbar. Character count and dollar cost sit next to the Synthesize button, updating before you commit. Synthesis is metered, and a tool that spends your Azure budget without showing the number first is training you not to look.

What it cost

Word timing is unavailable, and the panels say so in plain text. MAI-Voice-2 emits no WordBoundary events, so there is no alignment to draw. I could have estimated one by forced alignment against the script and drawn something plausible. A plausible alignment that is subtly wrong is worse than an absent one, because you would use it to make timing judgments it cannot support. The tool says “unavailable” and leaves the space empty.

The other cost is that this is an instrument, not a product. It assumes you can read a spectrogram. It is uncompromisingly for one job and one user.

What I’d change next

Ratings and notes are per-render and free-text, which means the comparisons never accumulate. The evaluation should build a persistent picture across sessions — this voice consistently scores well for warmth at styleDegree 1.5 and falls apart above 2 — instead of resetting every time. Export to CSV is a substitute for that, not a solution.