Wbudowanie text-to-speech w polskim do własnej aplikacji webowej, mobilnej lub IVR-a to dziś standard, ale wybór API zmienia się szybko. W tym porównaniu zestawiam cztery najpopularniejsze: ElevenLabs, Google Cloud TTS, Microsoft Azure Speech i Amazon Polly. Patrzymy na jakość polskiego, latency, cenę za 1M znaków oraz ergonomię integracji.

ElevenLabs API

Najwyższa jakość polskiego, ale i najwyższa cena (~$0,30/1k znaków na planie Pro). Latency: 400-1500 ms zależnie od modelu (Turbo v2.5 vs Multilingual v2). Idealne do produktów, gdzie jakość brzmienia jest priorytetem (audiobooki, nagrania marketingowe, asystenci głosowi premium).

Google Cloud Text-to-Speech

WaveNet i Neural2 dla polskiego. Cena: $0,016/1k znaków (Neural2) — kilkanaście razy taniej od ElevenLabs. Jakość polskiego dobra, ale wyraźnie syntetyczna. Latency 200-400 ms. Idealne do skalowalnych aplikacji z dużym wolumenem (np. czytniki artykułów, IVR-y, edukacja).

Microsoft Azure Speech Service

Neural voices w polskim (Marek, Zofia, Agnieszka). Cena podobna do Google ($0,016/1k). Bardzo dobra jakość polskiego, świetne SSML do kontroli intonacji. Latency 250-500 ms. Wybór często enterprise’owy ze względu na compliance i integracje z Microsoft 365.

Amazon Polly

Generative voices dla polskiego (Ola, Jacek). Cena: $4/1M znaków na Standard, $30/1M na Generative. Najtańsza opcja po Google. Latency 200-400 ms. Świetna integracja z AWS Lambda i Polly Brand Voice dla firm chcących mieć branded voice.

Porównanie cen przy 10 mln znaków/mies.

ElevenLabs: ~$3000. Google Neural2: ~$160. Azure Neural: ~$160. Amazon Polly Standard: ~$40, Generative: ~$300. Różnica między ElevenLabs a Polly to kilkadziesiąt razy.

Co wybrać

Dla aplikacji premium z małym wolumenem ale wymaganiami jakości — ElevenLabs. Dla skalowalnej aplikacji typu czytnik artykułów — Polly Standard lub Google Neural2. Dla integracji enterprise w stacku Microsoft — Azure. Dla najlepszego stosunku ceny do jakości generative — Amazon Polly Generative.

Przykładowy kod (Node.js + ElevenLabs)

const fetch = require('node-fetch');
const fs = require('fs');

const r = await fetch('https://api.elevenlabs.io/v1/text-to-speech/VOICE_ID', {
  method: 'POST',
  headers: {
    'xi-api-key': process.env.XI_KEY,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    text: 'Witaj, to jest test polskiego głosu AI.',
    model_id: 'eleven_multilingual_v2',
    voice_settings: { stability: 0.5, similarity_boost: 0.75 }
  })
});
const buf = await r.arrayBuffer();
fs.writeFileSync('out.mp3', Buffer.from(buf));