Konuşma Sentezi API'si: Uygulamanıza Doğal Konuşma Ekleyin

Yayınlandı 22 Mayıs 2026
Yazar Speeko Ekibi
ses-sentezitts-apikonusma-uretimigelistiriciler

Konuşma Sentezi API'si: Uygulamanıza Doğal Konuşma Ekleyin

Bir konuşma sentezi API'si, yazılı metni doğal sesli sese dönüştüren altyapıdır. Metni HTTP üzerinden gönderirsiniz ve bir ses dosyası geri alırsınız — ancak bu dönüşümün kalitesi, hızı ve esnekliği sağlayıcılar arasında çok değişir.

İşte konuşma sentezi API'lerinin gerçekte ne yaptığı, birini seçerken nelerin önemli olduğu ve nasıl entegre edileceği.

Konuşma Sentezi Nasıl Çalışır?

Geleneksel metin okuma, önceden kaydedilmiş fonemleri bir araya getirerek birleştirmeli sentez kullanırdı. Sonuç robotik ve doğal olmayan bir sesti.

Modern API'ler, sinirsel konuşma sentezi kullanır ve derin öğrenme mimarileri üzerine kuruludur:

  1. Metin ön işleme — kısaltmaları, sayıları, URL'leri, özel karakterleri normalleştirir
  2. Dilsel analiz — kelime sınırlarını, konuşma bölümlerini, cümle yapısını belirler
  3. Prozodi tahmini — dilsel özellikleri zamanlama, perde ve vurgu ile eşler
  4. Dalga formu üretimi — akustik özelliklerden ham ses sentezler

Sonuç: bir makinenin okuması gibi değil, bir insanın konuşması gibi ses çıkaran sestir.

Değerlendirilecek Temel Özellikler

Ses Kalitesi

İyi ve kötü sinirsel TTS arasındaki fark duyulabilir. Kalite en çok şunlar için önemlidir:

  • Uzun biçimli içerik (sesli kitaplar, podcast'ler), yorgunluğun robotik seslerle başladığı yerler
  • Sesin markanızı temsil ettiği müşteriye yönelik uygulamalar
  • Netliğin anlaşılırlığı etkilediği eğitim içeriği

Bir sağlayıcıya taahhütte bulunmadan önce örnekleri dinleyin.

Gecikme

İki tür gecikme önemlidir:

  • İlk bayt gecikmesi — sesin gelmeye ne kadar çabuk başladığı (gerçek zamanlı/akış kullanımı için kritik)
  • Toplam üretim süresi — tam dosyanın hazır olana kadar ne kadar sürdüğü (toplu işler için önemlidir)

Etkileşimli uygulamalar (sesli aracılar, gerçek zamanlı geri bildirim) için, 300 ms'nin altındaki ilk bayt gecikmesini hedefleyin. Toplu işler için toplam süre daha önemlidir.

Ses Seçimi

Daha fazla ses her zaman daha iyi değildir. Önemli olan:

  • Hedef dilleriniz için sesler var mı?
  • Hem erkek hem de kadın seçenekleri var mı?
  • Ses stilleri kullanım durumunuzla eşleşiyor mu (nötr, konuşkan, otoriter)?

SSML Desteği

SSML (Konuşma Sentezi İşaretleme Dili), telaffuzu hassas bir şekilde kontrol etmenizi sağlar:

<speak>
  Lütfen
  <say-as interpret-as="cardinal">4</say-as> haneli PIN'inizi girin,
  ardından
  <emphasis level="strong">kare tuşuna</emphasis> basın.
  <break time="1s"/>
  Kalan süreniz
  <say-as interpret-as="time" format="hms12">2:30pm</say-as>.
</speak>

SSML olmadan, modelin metninizi yorumlamasına takılıp kalırsınız.

Çıktı Formatı Esnekliği

Format En İyi Kullanım Ödünleşim
MP3 Web oynatma, podcast'ler Kayıplı sıkıştırma
WAV Ses düzenleme, oyun geliştirme Büyük dosyalar
OGG Daha küçük boyutlu web Daha az uyumlu
PCM akışı Gerçek zamanlı oynatma Ham, kapsayıcı yok

Konuşma Sentezi API Entegrasyonu

Temel İstek (curl)

curl -X POST https://api.speekoapp.com/v1/tts \
  -H "X-API-Key: $SPEEKO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Siparişiniz kargoya verildi ve Cuma gününe kadar ulaşacak.",
    "voice": "en-US-1",
    "format": "mp3",
    "speed": 1.0
  }' \
  --output notification.mp3

Python: FastAPI'den Üret ve Döndür

from fastapi import FastAPI, Response
import requests
import os

app = FastAPI()

@app.post("/speak")
async def speak(text: str, voice: str = "en-US-1"):
    resp = requests.post(
        "https://api.speekoapp.com/v1/tts",
        headers={"X-API-Key": os.environ["SPEEKO_API_KEY"]},
        json={"text": text, "voice": voice, "format": "mp3"},
    )
    resp.raise_for_status()
    return Response(content=resp.content, media_type="audio/mpeg")

Node.js: Sesi Tarayıcıya Akıt

import express from 'express';

const app = express();

app.get('/speak', async (req, res) => {
  const { text, voice = 'en-US-1' } = req.query;

  const ttsResponse = await fetch('https://api.speekoapp.com/v1/tts', {
    method: 'POST',
    headers: {
      'X-API-Key': process.env.SPEEKO_API_KEY,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ text, voice, format: 'mp3' }),
  });

  if (!ttsResponse.ok) {
    return res.status(ttsResponse.status).json({ error: 'TTS başarısız oldu' });
  }

  res.set('Content-Type', 'audio/mpeg');
  ttsResponse.body.pipeTo(
    new WritableStream({
      write(chunk) { res.write(chunk); },
      close() { res.end(); },
    })
  );
});

Sağlayıcı Karşılaştırması

Sağlayıcı Kalite SSML Diller 1K karakter başına fiyat
Speeko Mükemmel 30+ 0,03$
Google Neural2 Mükemmel ✓ Tam 50+ 0,016$
AWS Polly Sinirsel Çok İyi ✓ Tam 30+ 0,016$
Azure Sinirsel TTS Mükemmel ✓ Tam 100+ 0,016$
OpenAI TTS Çok İyi 57 0,015$
ElevenLabs En İyi Kısmi 30+ ~0,06$

Uç Durumları Yönetme

Sayılar ve tarihler: API'nin "10/05/25"i doğru yorumlayacağına güvenmeyin — farklı formatlarda bir tarih, kesir veya tek tek rakamlar olarak okuyabilir. SSML <say-as> kullanın veya açıkça yazın.

Kısaltmalar: "Dr." bağlama göre "drive" veya "doktor" olarak okunur. Bağlam önemliyse, genişletin: "Doktor Smith".

İngilizce metinde yabancı kelimeler: Çoğu API yaygın yabancı kelimeleri yönetir, ancak marka adları veya teknik terimler fonem ipuçlarına ihtiyaç duyabilir:

<phoneme alphabet="ipa" ph="ˈfɪɡmə">Figma</phoneme>

Uzun metin: Göndermeden önce cümle sınırlarında bölün. Çoğu API, istek başına 3.000–10.000 karakterle sınırlar.

Sentezlenmiş Sesi Önbelleğe Alma

Statik içerik için — ürün açıklamaları, kurs anlatımı, uygulama mesajları — her istekte yeniden üretmek yerine sentezlenmiş sesi önbelleğe alın. İçerik değişmez, bu nedenle ses de değişmemelidir.

İçerik özeti kullanarak basit dosya önbelleği:

import hashlib
import os
from pathlib import Path

CACHE_DIR = Path(".tts_cache")
CACHE_DIR.mkdir(exist_ok=True)

def synthesize_cached(text: str, voice: str = "am_michael") -> bytes:
    cache_key = hashlib.sha256(f"{voice}:{text}".encode()).hexdigest()
    cache_path = CACHE_DIR / f"{cache_key}.mp3"

    if cache_path.exists():
        return cache_path.read_bytes()  # Önbellek isabeti — API çağrısı yok

    response = requests.post(
        "https://api.speekoapp.com/v1/tts",
        headers={"Authorization": f"Bearer {os.environ['SPEEKO_API_KEY']}"},
        json={"text": text, "voice": voice, "format": "mp3"},
    )
    response.raise_for_status()

    cache_path.write_bytes(response.content)
    return response.content

Metin değiştiğinde, özet değişir ve otomatik olarak yeni bir dosya üretilir. Eski önbellek dosyaları, değiştirilme zamanına göre temizlenebilir:

# 30 günden eski önbelleğe alınmış dosyaları sil
find .tts_cache -name "*.mp3" -mtime +30 -delete

Üretim dağıtımları için, dosya önbelleğini Redis veya CDN destekli bir önbellekle değiştirin.

Başlarken

speekoapp.com/register adresinden kaydolun — 5$ ücretsiz kredi, kredi kartı gerekmez. İlk ses sentezi isteğinizin kurulumu bir dakikadan az sürer.

Uzun biçimli içerik üretimi için, bkz. Blogdan Podcast'e Otomasyon. SSML için, bkz. SSML Gelişmiş Kılavuzu.