Text to Speech

Ubah teks menjadi suara neural yang natural: 300+ voice dalam 70+ bahasa, termasuk Indonesia, Jawa, dan Sunda.

Ubah teks (maks. 5.000 karakter) menjadi audio MP3 dengan suara neural Microsoft Edge. Pilih dari 300+ voice dalam 70+ bahasa - termasuk Indonesia (Gadis, Ardi), Jawa, dan Sunda - lalu atur kecepatan, nada, dan volume. Hasilnya berkas audio/mpeg siap putar, atau amplop JSON base64 lengkap dengan waktu per kata dan subtitle SRT. Tersedia dua server (Server 1 bawaan dan Server 2) yang bisa dipilih bebas lewat field server; teks panjang dipecah otomatis per kalimat dan audionya disambung kembali.

Semua respons memakai amplop { "is_success", "message", "data" } kecuali disebutkan lain. Kode error umum: lihat https://apipedia.id/docs#kode-status-error.

Endpoint (3)

Ubah teks menjadi audio MP3

POST https://api.apipedia.id/v1/tts

Mengubah teks menjadi suara neural (mesin Microsoft Edge TTS) dalam format MP3 24 kHz mono.

Body: text wajib, maks 5.000 karakter (teks panjang dipecah otomatis per kalimat dan audionya disambung); voice opsional, bawaan id-ID-GadisNeural (perempuan; id-ID-ArdiNeural laki-laki; daftar lengkap di GET /tts/voices); rate kecepatan -50 sampai 100 (persen relatif), pitch nada -50 sampai 50 (Hz relatif), volume -50 sampai 50 (persen relatif) — ketiganya menerima angka (10) atau teks ("+10%", "-5Hz"), bawaan 0; bitrate 48 (bawaan) atau 96 kbps.

Memilih server. Ada dua server TTS: server: 1 (bawaan) dan server: 2. Keduanya menghasilkan suara yang sama; bedanya hanya jalur jaringannya. Server yang dipakai selalu yang Anda minta — tidak ada perpindahan otomatis — dan tercantum di header X-TTS-Server (atau field data.server). Bila satu server menjawab 502/503/504, ulangi dengan server lainnya. Status tiap server ada di GET /tts/servers. server boleh dikirim di body atau sebagai query ?server=2.

Bentuk jawaban (output, di body atau query):

Jawaban tidak pernah dicache (Cache-Control: no-store). Error: 400 masukan tidak valid; 502 server TTS gagal menyintesis (mis. nama voice tidak dikenal); 503 server yang dipilih sedang tidak tersedia atau sibuk (pesannya menyebut server lain yang bisa dicoba); 504 melewati batas waktu.

ParameterLokasiTipeWajibKeterangan
outputquerystringtidakaudio (bawaan, berkas audio/mpeg) atau base64 (amplop JSON). Boleh juga dikirim di body. Pilihan: audio, base64. Default audio.
serverquerystringtidakServer TTS: 1 (bawaan) atau 2. Boleh juga dikirim di body. Pilihan: 1, 2. Default 1.

Body (application/json, wajib):

{
  "text": "Halo, selamat datang di APIPedia. Ini contoh suara dari API Text to Speech.",
  "voice": "id-ID-GadisNeural",
  "rate": 0,
  "pitch": 0,
  "volume": 0,
  "bitrate": 48,
  "server": 1,
  "subtitles": true
}

Contoh request:

curl -X POST "https://api.apipedia.id/v1/tts?output=base64&server=1" \
  -H "Authorization: Bearer apk_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"text":"Halo, selamat datang di APIPedia. Ini contoh suara dari API Text to Speech.","voice":"id-ID-GadisNeural","rate":0,"pitch":0,"volume":0,"bitrate":48,"server":1,"subtitles":true}'

Contoh respons (200):

{
  "is_success": true,
  "message": "Audio berhasil dibuat.",
  "data": {
    "server": 1,
    "voice": "id-ID-GadisNeural",
    "format": "mp3",
    "contentType": "audio/mpeg",
    "bitrate": 48,
    "size": 38880,
    "characters": 75,
    "base64": "//NkxAAAAAANIAAAAAExBTUUzLjEwMFVVVVVVVVVVVVVV...",
    "words": [
      {
        "text": "Halo",
        "startMs": 100,
        "endMs": 512
      },
      {
        "text": "selamat",
        "startMs": 750,
        "endMs": 1187
      },
      {
        "text": "datang",
        "startMs": 1200,
        "endMs": 1562
      }
    ],
    "srt": "1\n00:00:00,100 --> 00:00:03,450\nHalo selamat datang di APIPedia Ini contoh suara dari API\n\n2\n00:00:03,462 --> 00:00:04,900\nText to Speech\n"
  }
}

Error khusus endpoint ini:

Daftar server Text to Speech

GET https://api.apipedia.id/v1/tts/servers

Daftar server TTS yang bisa dipilih lewat field server POST /tts. default: true menandai server yang dipakai bila server tidak dikirim; available: false berarti server itu sedang dimatikan dan permintaan ke sana dijawab 503. Kedua server menghasilkan suara yang sama — pilih bebas, dan pindah ke server lain bila salah satunya lambat atau gagal.

Contoh request:

curl -X GET "https://api.apipedia.id/v1/tts/servers" \
  -H "Authorization: Bearer apk_xxxxxxxxxxxxxxxx"

Contoh respons (200):

{
  "is_success": true,
  "message": "2 dari 2 server tersedia.",
  "data": {
    "defaultServer": 1,
    "servers": [
      {
        "id": 1,
        "name": "Server 1",
        "default": true,
        "available": true
      },
      {
        "id": 2,
        "name": "Server 2",
        "default": false,
        "available": true
      }
    ],
    "note": "Pilih server lewat field \"server\" (1 atau 2) pada POST /v1/tts. Kedua server menghasilkan suara yang sama; pindah server bila salah satunya lambat atau gagal."
  }
}

Daftar voice Text to Speech

GET https://api.apipedia.id/v1/tts/voices

Daftar voice yang bisa dipakai di field voice POST /tts: nama (name), locale, gender, nama tampilan, serta kategori dan karakter suaranya. Saring dengan locale (kode bahasa id cocok dengan semua id-*; locale penuh en-US hanya cocok dengan dirinya), gender (Male/Female), dan q (kata kunci pada nama). Daftar di-cache 12 jam di server; jawaban juga memuat servers dan batas masukan.

ParameterLokasiTipeWajibKeterangan
localequerystringtidakKode bahasa (id, jv, su, en) atau locale penuh (id-ID, en-US).
genderquerystringtidakMale atau Female. Pilihan: Male, Female.
qquerystringtidakKata kunci pada nama voice, mis. gadis atau multilingual.

Contoh request:

curl -X GET "https://api.apipedia.id/v1/tts/voices?locale=id&gender=Female&q=gadis" \
  -H "Authorization: Bearer apk_xxxxxxxxxxxxxxxx"

Contoh respons (200):

{
  "is_success": true,
  "message": "1 voice ditemukan.",
  "data": {
    "count": 1,
    "total": 322,
    "defaultVoice": "id-ID-GadisNeural",
    "servers": [
      {
        "id": 1,
        "name": "Server 1",
        "default": true,
        "available": true
      },
      {
        "id": 2,
        "name": "Server 2",
        "default": false,
        "available": true
      }
    ],
    "voices": [
      {
        "name": "id-ID-GadisNeural",
        "locale": "id-ID",
        "gender": "Female",
        "displayName": "Gadis - Indonesian (Indonesia)",
        "categories": [
          "General"
        ],
        "personalities": [
          "Friendly",
          "Positive"
        ]
      }
    ],
    "limits": {
      "maxChars": 5000,
      "bitrates": [
        48,
        96
      ],
      "rate": [
        -50,
        100
      ],
      "pitch": [
        -50,
        50
      ],
      "volume": [
        -50,
        50
      ]
    }
  }
}

Versi Markdown halaman ini

Coba Text to Speech di Sandbox