Mandarin Chinese text to speech API: MAI-Voice-2.1 zh-CN vs Sume zh

MAI-Voice-2.1 lists Chinese (Simplified) as zh-CN; Sume tags zh and bills by character. Audition Mandarin ad copy for 1 cent and know what to check.

4 min readSume
All posts

For Mandarin ad copy in simplified characters, both MAI-Voice-2.1 (zh-CN) and Sume (zh voice tag) are in scope. Traditional characters and Cantonese are not on Microsoft's list. A one-cent Sume audition tells you whether a voice reads your copy the way you want.

What Microsoft lists

Microsoft's model page lists Chinese (Simplified), and the OpenRouter Flash page shows a single zh-CN code. There is no Traditional Chinese or Cantonese entry in what I read.

Chinese coverage (read 2026-10-05)
Locale codeListed onNote
zh-CNMAI-Voice-2.1 and FlashChinese (Simplified); the only Chinese entry
zh-TW, yueNot listedTraditional Chinese and Cantonese are not on either list
zhSume voice tagOne Chinese tag

What Sume ships

Sume tags a single zh language. Send simplified text with language: "zh". The documentation does not promise Cantonese or a Taiwan-specific read, so test those separately and do not infer support from the tag.

Sume's TTS Router (POST /v1/tts-router/generate) takes a required model (sonic-3.6, sonic-3.5, sonic-3, sonic-latest or sonic-preview), one of transcript or transcript_source, a voice selector and a language string of 2 to 16 characters. It is character-metered at $0.0475 per 1,000 characters, rounded up to whole cents per job, with a 20,000-character cap per request.

A one-cent audition

Write one line of about 200 characters that contains your hardest words: a price, a date, a brand name and a number. Save it as line.txt, then submit it and read the job. A line of 210 characters or fewer is the minimum one-cent job. Set language to the code you will use in production; if the chosen voice is tagged for a different language you get the 409 guard rather than a charge.

JOB=$(curl -sS -X POST https://api.sume.com/v1/tts-router/generate \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: audition-zh-001" \
  -d "$(jq -n --rawfile t line.txt '{model:"sonic-3.6",transcript:$t,avatar_handle:"product_host",language:"zh"}')" \
  | jq -r '.data.request_id')
curl -sS https://api.sume.com/v1/jobs/$JOB/status -H "Authorization: Bearer $SUME_API_KEY"
curl -sS https://api.sume.com/v1/jobs/$JOB/result -H "Authorization: Bearer $SUME_API_KEY"

What to listen for

  • Arabic numerals and units: 5kg, 30%, 12:30 and Latin product codes are classic traps; put each in the test line.
  • Latin brand names: check whether the voice reads them as English words or as letters.
  • Full-width versus half-width punctuation: pick one in the script so pauses fall predictably.
  • Polyphonic characters: a place name read with the wrong tone is the failure to listen for.
  • Length: one Chinese character is one character for billing, so a Chinese script is shorter in characters than the same script in English.

What it costs

At $0.0475 per 1,000 characters, a 300-character Chinese read is 2 cents; a 1,000-character narration is 5 cents.

Audition cost on Sume at list rate (read 2026-10-05)
TestCharacters per lineJobsSume cost
One line210 or fewer1$0.01
8 lines (one per hard case)210 or fewer8$0.08
One 1,000-character script1,0001$0.05

Where this stops

Sume's TTS is asynchronous: you submit, poll GET /v1/jobs/:id/status, then read /result. It does not stream audio and it has no SSML field, so pauses and emphasis come from your punctuation and the generation_config controls (speed 0.6 to 1.5, volume 0.5 to 2, a short emotion guide). Microsoft's Flash model is the one built for live conversation; for a rendered ad or a narrated video, a finished file is the thing you need.

Sources

Related posts

More in Models

All Models posts

Written by Sume