ElevenLabs 8 kHz mu-law and A-law vs Sume TTS pcm_mulaw, pcm_alaw

For phone-line audio, ElevenLabs lists 8 kHz mu-law and A-law. Sume TTS 1.0 offers pcm_mulaw and pcm_alaw in a raw container at 8000 Hz.

5 min readSume
All posts

Yes: Sume TTS 1.0 can return 8 kHz mu-law and A-law audio for telephony, using output_format with container: raw, encoding: pcm_mulaw or pcm_alaw and sample_rate: 8000. ElevenLabs lists the same two codecs at 8 kHz on its text-to-speech page, but also lists Opus at 48 kHz, which Sume does not.

ElevenLabs facts are from its text-to-speech page (read 2026-10-10). Sume facts are from the Sume OpenAPI contract.

The formats on each side

ElevenLabs lists MP3 at 22.05 to 44.1 kHz with 32 to 192 kbps, PCM S16LE at 16 to 44.1 kHz, mu-law and A-law at 8 kHz, and Opus at 48 kHz with 32 to 192 kbps. Sume's schema lets you choose a container (mp3, wav, raw), a sample rate from a fixed list, and for raw output an encoding.

Telephony-relevant outputs (ElevenLabs read 2026-10-10; Sume per OpenAPI)
NeedElevenLabsSume TTS 1.0
8 kHz mu-lawListedraw + pcm_mulaw + 8000
8 kHz A-lawListedraw + pcm_alaw + 8000
16 kHz PCMListedraw + pcm_s16le + 16000
Opus 48 kHzListedNot offered
MP322.05 to 44.1 kHz8000 to 48000 Hz, 32000 to 192000 bps

A request body for a phone prompt

A typical interactive voice response prompt is a few sentences. The body below asks for 8 kHz mu-law raw audio. Put your voice id in place of the placeholder UUID; it must be a UUID or a voi_ id.

import asyncio, os, httpx

async def main():
    key = os.environ["SUME_API_KEY"]
    body = {
        "transcript": "Thanks for calling. Press one for support.",
        "voice": {"id": "00000000-0000-0000-0000-000000000000"},
        "output_format": {"container": "raw", "encoding": "pcm_mulaw",
                          "sample_rate": 8000},
    }
    async with httpx.AsyncClient(base_url="https://api.sume.com") as c:
        r = await c.post("/v1/tts-1.0/generate", json=body,
                         headers={"Authorization": f"Bearer {key}"})
        print(r.status_code, r.text[:200])

asyncio.run(main())

Cost and limits for short prompts

A 45-character prompt is far below one cent of per-character cost, so the one-cent minimum per job applies. At $0.0475 per 1,000 characters, a 2,000 character script costs 9.5 cents before rounding, and Sume ceilings to whole cents, so 10 cents. The job maximum is 95 cents for a 20,000 character script.

What to check on your platform

Confirm which codec your telephony provider expects before choosing. North American carriers typically pair with mu-law and many other regions with A-law, but check your provider's documentation rather than relying on this post. Also confirm whether the provider wants a WAV header or headerless raw bytes; Sume's raw container has no header.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume