Edge TTS: Text to Speech Gratis Tanpa API Key (Tutorial + Demo)
Oleh Tim APIPedia, Tim Engineering APIPedia · Terbit · 8 menit baca
Ubah teks jadi suara natural Bahasa Indonesia, Jawa, dan Sunda dengan Edge TTS: gratis, tanpa API key. Lengkap dengan CLI, kode Python, dan demo web.

Edge TTS adalah cara gratis mengubah teks menjadi suara natural memakai layanan "Read Aloud" milik Microsoft Edge, tanpa API key, tanpa akun, dan tanpa kartu kredit. Lewat library Python open source edge-tts, Anda bisa membuat MP3 dari teks Bahasa Indonesia, Jawa, Sunda, sampai puluhan bahasa lain hanya dengan satu perintah.
Artikel ini membahas cara kerjanya, cara pakai lewat terminal dan Python, lalu membangun demo web sederhana: ketik teks, klik tombol, suara langsung muncul dan bisa diputar atau diunduh. Kami juga jujur soal batasannya, karena "gratis dan unlimited" selalu punya catatan kaki.
Apa itu Edge TTS?
Browser Microsoft Edge punya fitur Read Aloud yang membacakan halaman web dengan suara neural berkualitas tinggi. Library edge-tts (dibuat oleh rany2 di GitHub) memanggil layanan yang sama dari Python, sehingga Anda bisa memakainya tanpa membuka Edge, tanpa Windows, dan tanpa mendaftar Azure.
Saat kami uji pada 6 November 2026 dengan edge-tts versi 7.3.1, tersedia 322 suara dalam 75 bahasa. Untuk pengguna Indonesia, yang paling relevan:
| Bahasa | Suara perempuan | Suara laki-laki |
|---|---|---|
| Indonesia | id-ID-GadisNeural | id-ID-ArdiNeural |
| Jawa | jv-ID-SitiNeural | jv-ID-DimasNeural |
| Sunda | su-ID-TutiNeural | su-ID-JajangNeural |
| Melayu | ms-MY-YasminNeural | ms-MY-OsmanNeural |
| Inggris (multibahasa) | en-US-AvaMultilingualNeural | en-US-AndrewMultilingualNeural |
Benarkah gratis dan unlimited?
Gratis: ya. Tidak ada API key, tidak ada tagihan, tidak ada kuota karakter yang diumumkan.
Unlimited: tidak sepenuhnya. Edge TTS memakai layanan internal Microsoft yang tidak didokumentasikan untuk developer. Artinya:
- Tidak ada SLA. Layanan bisa lambat, menolak koneksi, atau berubah tanpa pemberitahuan. Pengelola library beberapa kali harus merilis versi baru agar tetap berjalan, jadi selalu pakai versi terbaru.
- Permintaan yang terlalu banyak dari satu IP bisa dibatasi. Untuk pemakaian pribadi dan proyek kecil biasanya aman, tetapi jangan dijadikan tulang punggung produk berskala besar.
- Status lisensi untuk penggunaan komersial tidak jelas, karena layanan ini tidak ditawarkan resmi sebagai API. Untuk produk komersial, pertimbangkan API TTS resmi.
Singkatnya: sangat cocok untuk belajar, prototipe, konten pribadi, alat internal, dan aksesibilitas. Untuk produksi, siapkan rencana cadangan.
Langkah 1: Install edge-tts
Butuh Python 3.8 ke atas. Cukup satu perintah:
pip install edge-tts
Cek suara yang tersedia, misalnya khusus suara Indonesia:
edge-tts --list-voices | grep id-ID
Langkah 2: Coba dari terminal
Perintah berikut membuat file halo.mp3 dengan suara Gadis:
edge-tts --voice id-ID-GadisNeural \
--text "Halo! Selamat datang di APIPedia." \
--write-media halo.mp3
Atur kecepatan, nada, dan volume dengan nilai relatif:
edge-tts --voice id-ID-ArdiNeural \
--rate=+15% --pitch=-5Hz --volume=+10% \
--text "Pengumuman: rapat dimulai pukul sembilan pagi." \
--write-media pengumuman.mp3
Bonus yang jarang diketahui: Edge TTS juga bisa membuat subtitle SRT yang sinkron dengan audionya. Praktis untuk video pendek.
edge-tts --voice id-ID-ArdiNeural \
--file naskah.txt \
--write-media narasi.mp3 \
--write-subtitles narasi.srt
Hasil narasi.srt berisi potongan kalimat lengkap dengan timestamp, siap diimpor ke CapCut, Premiere, atau editor video lain.
Langkah 3: Pakai dari Python
Versi paling sederhana, cocok untuk skrip otomatisasi:
import asyncio
import edge_tts
async def main():
tts = edge_tts.Communicate(
text="Terima kasih sudah berbelanja. Pesanan Anda sedang dikemas.",
voice="id-ID-GadisNeural",
rate="+5%",
)
await tts.save("notifikasi.mp3")
asyncio.run(main())
Untuk aplikasi web, lebih baik ambil audio sebagai potongan byte (stream) supaya tidak perlu menulis file ke disk:
import io
import edge_tts
async def text_to_mp3_bytes(text: str, voice: str = "id-ID-GadisNeural") -> bytes:
buf = io.BytesIO()
async for chunk in edge_tts.Communicate(text, voice).stream():
if chunk["type"] == "audio":
buf.write(chunk["data"])
return buf.getvalue()
Demo: input teks, generate suara, langsung diputar
Sekarang kita gabungkan semuanya menjadi halaman web kecil. Pengguna mengetik teks, memilih suara, mengatur kecepatan dan nada, lalu klik Buat suara. Dalam hitungan detik, pemutar audio muncul dan suara langsung diputar, lengkap dengan tombol unduh MP3.

Dalam uji kami, kalimat 118 karakter menghasilkan audio 12 detik (sekitar 71 KB) dalam 0,7 sampai 3,3 detik, tergantung koneksi.
Cara kerjanya
- Browser mengirim teks, suara, kecepatan, dan nada ke endpoint
POST /api/ttsmilik server Anda. - Server Python (FastAPI) memanggil
edge_tts.Communicate()dan mengumpulkan potongan audio. - Layanan Read Aloud Microsoft membuat suara neural lewat WebSocket dan mengirimnya balik sebagai MP3.
- Server mengembalikan MP3 (
audio/mpeg) ke browser, yang mengubahnya menjadi Blob URL untuk diputar di elemen<audio>.
Kenapa butuh server perantara? Layanan Edge TTS tidak dirancang untuk dipanggil langsung dari halaman web, jadi browser tidak bisa terhubung sendiri. Server kecil Anda yang menjembatani.
Backend: server.py
# pip install edge-tts fastapi uvicorn
# Jalankan: uvicorn server:app --host 0.0.0.0 --port 8000
import io
from pathlib import Path
import edge_tts
from fastapi import FastAPI, HTTPException
from fastapi.responses import FileResponse, StreamingResponse
from pydantic import BaseModel, Field
app = FastAPI(title="Edge TTS Demo")
VOICES = {
"id-ID-GadisNeural": "Gadis (Indonesia, perempuan)",
"id-ID-ArdiNeural": "Ardi (Indonesia, laki-laki)",
"jv-ID-SitiNeural": "Siti (Jawa, perempuan)",
"su-ID-JajangNeural": "Jajang (Sunda, laki-laki)",
}
class TTSRequest(BaseModel):
text: str = Field(..., min_length=1, max_length=1000) # batasi panjang teks
voice: str = "id-ID-GadisNeural"
rate: int = Field(0, ge=-50, le=50) # persen
pitch: int = Field(0, ge=-20, le=20) # Hz
@app.get("/")
def index():
return FileResponse(Path(__file__).parent / "index.html")
@app.get("/api/voices")
def voices():
return [{"id": k, "label": v} for k, v in VOICES.items()]
@app.post("/api/tts")
async def tts(req: TTSRequest):
if req.voice not in VOICES:
raise HTTPException(400, "Suara tidak dikenal")
communicate = edge_tts.Communicate(
req.text, req.voice,
rate=f"{req.rate:+d}%", pitch=f"{req.pitch:+d}Hz",
)
buf = io.BytesIO()
try:
async for chunk in communicate.stream():
if chunk["type"] == "audio":
buf.write(chunk["data"])
except Exception as e:
raise HTTPException(502, f"Gagal membuat suara: {e}")
buf.seek(0)
return StreamingResponse(buf, media_type="audio/mpeg")
Frontend: index.html
Versi ringkas berikut sudah cukup untuk input teks, generate, dan memutar hasilnya. Simpan di folder yang sama dengan server.py.
<!doctype html>
<html lang="id">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Demo Edge TTS</title>
</head>
<body>
<h1>Demo Edge TTS</h1>
<textarea id="text" rows="5" cols="50">Halo! Ini suara dari Edge TTS.</textarea><br>
<select id="voice"></select>
Kecepatan <input type="range" id="rate" min="-50" max="50" step="5" value="0">
<button id="go">Buat suara</button>
<p id="status"></p>
<audio id="player" controls></audio>
<a id="dl" download="edge-tts.mp3" hidden>Unduh MP3</a>
<script>
const $ = (id) => document.getElementById(id);
// Isi pilihan suara dari server
fetch("api/voices").then(r => r.json()).then(list => {
$("voice").innerHTML = list
.map(v => `<option value="${v.id}">${v.label}</option>`).join("");
});
$("go").addEventListener("click", async () => {
$("go").disabled = true;
$("status").textContent = "Membuat suara...";
try {
const res = await fetch("api/tts", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
text: $("text").value,
voice: $("voice").value,
rate: Number($("rate").value),
}),
});
if (!res.ok) throw new Error("Gagal (" + res.status + ")");
const url = URL.createObjectURL(await res.blob());
$("player").src = url;
$("dl").href = url;
$("dl").hidden = false;
$("player").play();
$("status").textContent = "Selesai!";
} catch (e) {
$("status").textContent = e.message;
} finally {
$("go").disabled = false;
}
});
</script>
</body>
</html>
Menjalankan demo
pip install edge-tts fastapi uvicorn
uvicorn server:app --host 0.0.0.0 --port 8000
# buka http://localhost:8000 di browser
Ketik kalimat apa saja, pilih suara, klik Buat suara, dan dengarkan hasilnya.
Tips sebelum demo dibuka ke publik
- Batasi panjang teks. Demo di atas membatasi 1.000 karakter per permintaan lewat validasi Pydantic.
- Pasang rate limit per IP, misalnya dengan
slowapiatau di reverse proxy (Nginx, Cloudflare). Tanpa ini, satu orang bisa menghabiskan "jatah" IP server Anda di layanan Microsoft. - Cache hasil. Simpan MP3 dengan kunci hash dari teks + suara + kecepatan + nada. Kalimat yang sama tidak perlu dibuat ulang.
- Pecah teks panjang per paragraf, buat suara per bagian, lalu gabungkan. Lebih tahan gagal daripada satu permintaan raksasa.
- Tangani error dengan ramah. Karena layanannya tidak resmi, kegagalan sesekali itu normal. Tampilkan pesan "coba lagi" alih-alih halaman error.
- Update library secara rutin dengan
pip install -U edge-tts, karena perubahan di sisi Microsoft biasanya diatasi lewat rilis baru.
Ide pemakaian
- Voice-over video pendek TikTok, Reels, atau Shorts, lengkap dengan subtitle SRT.
- Versi audio artikel blog, supaya pembaca bisa "mendengarkan" artikel.
- Pengumuman otomatis: antrean, jadwal sholat di papan informasi masjid, atau bel sekolah.
- Voice note bot WhatsApp atau Telegram.
- Materi belajar bahasa daerah dengan suara Jawa dan Sunda.
- Fitur aksesibilitas untuk pengguna dengan gangguan penglihatan.
Butuh TTS yang stabil untuk produksi?
Kalau aplikasi Anda butuh jaminan uptime dan lisensi yang jelas, pakai API TTS resmi. AI Gateway APIPedia mendukung text-to-speech dari berbagai provider lewat satu token dan satu base URL, sehingga Anda bisa mulai dengan Edge TTS untuk prototipe, lalu pindah ke model resmi tanpa merombak arsitektur. Daftar model dan harganya ada di katalog AI console.
Ingin suara yang lebih ekspresif atau kloning suara sendiri? Baca juga panduan kami tentang ElevenLabs code to voice.
FAQ
Apakah Edge TTS benar-benar gratis?
Ya. Tidak perlu API key, akun, maupun kartu kredit. Anda cukup install library edge-tts dan langsung pakai.
Apakah ada batas jumlah karakter?
Tidak ada kuota yang diumumkan, tetapi layanan ini tidak resmi, jadi permintaan dalam jumlah besar dari satu IP bisa dibatasi atau ditolak sewaktu-waktu.
Apakah boleh dipakai untuk konten komersial?
Statusnya abu-abu karena Microsoft tidak menawarkan layanan ini sebagai API publik. Untuk produk komersial, lebih aman memakai API TTS resmi yang lisensinya jelas.
Apakah bisa dipanggil langsung dari JavaScript di browser?
Tidak secara langsung. Gunakan server perantara seperti contoh FastAPI di atas, atau port edge-tts untuk Node.js di sisi server.
Bisakah membaca teks Bahasa Jawa dan Sunda?
Bisa. Tersedia suara jv-ID-SitiNeural, jv-ID-DimasNeural, su-ID-TutiNeural, dan su-ID-JajangNeural.
Kenapa muncul error koneksi atau 403?
Biasanya karena versi library sudah usang atau layanan sedang membatasi. Jalankan pip install -U edge-tts, tunggu sebentar, lalu coba lagi.
Sumber
Topik: #edge tts #text to speech #python #tutorial #ai voice #gratis
Tentang penulis
Tim APIPedia — Tim Engineering APIPedia
Tim engineering di balik APIPedia yang membangun dan memelihara API data Indonesia - ongkir, OCR KTP, data wilayah, BMKG, hingga server MCP - dan menulis panduan integrasinya dari pengalaman langsung.