GPT Translator Logo
Live & Streaming

API Terjemahan Real-Time

Tambahkan terjemahan suara-ke-suara secara langsung ke aplikasi apa pun dalam hitungan menit. Streaming audio masuk dan terima audio serta transkrip terjemahan kembali — semuanya melalui satu koneksi WebSocket.

Mengapa API Terjemahan Real-Time?

Dibangun untuk aplikasi yang membutuhkan terjemahan instan dan berkelanjutan. Satu koneksi persisten menangani seluruh sesi — tanpa polling, tanpa jeda, dan tanpa kompleksitas.

Latensi Sangat Rendah

Audio streaming diterjemahkan dan dikembalikan secara real-time. Tidak ada perjalanan bolak-balik request-response — hasil tiba saat pembicara sedang berbicara.

Audio Masuk, Audio Keluar

Kirim audio mikrofon mentah dan terima kembali suara yang telah diterjemahkan. Transkrip input dan output juga di-streaming sehingga Anda dapat menampilkan caption secara langsung.

130+ Bahasa

Terjemahkan ke bahasa utama mana pun menggunakan kode bahasa standar BCP-47. Ganti bahasa target antar sesi tanpa perubahan SDK.

Aman Secara Default

Setiap koneksi diautentikasi menggunakan token JWT Anda. Sesi diisolasi per pengguna — audio Anda tidak pernah dibagikan atau disimpan.

Memulai

Hubungkan & Autentikasi

API Terjemahan Real-Time berjalan melalui namespace Socket.IO khusus. Kirim API key Anda sebagai parameter query saat membuat koneksi — server akan memvalidasinya sebelum sesi dimulai.

Endpoint
wss://api.gpttranslator.co
  └── namespace: /api/realtime-translator
JavaScript — Socket.IO
import { io } from 'socket.io-client';

// Connect to the Realtime Translation namespace
const socket = io('https://api.gpttranslator.co/api/realtime-translator', {
  transports: ['websocket'],
  query: {
    apiKey: 'YOUR_API_KEY'  // your GPT Translator API key
  },
});

Catatan: Dapatkan API key Anda dari dashboard GPT Translator di bagian API Keys. Koneksi tanpa API key yang valid akan langsung ditolak.

Jangan pernah mengekspos API key Anda di kode sisi klien

Contoh kode di atas hanya untuk ilustrasi. Menyematkan API key langsung di JavaScript browser akan mengeksposnya kepada siapa saja yang memeriksa source code halaman atau lalu lintas jaringan Anda — siapa pun kemudian dapat menggunakan key Anda dan menghabiskan saldo token Anda.

Disarankan: gunakan proxy melalui backend Anda sendiri

Server Anda menyimpan API key dengan aman dan membuka koneksi Socket.IO atas nama browser. Browser terhubung ke server Anda, bukan langsung ke API terjemahan.

Node.js backend (server-side)
// Your backend holds the key — the browser never sees it
const socket = io('https://api.gpttranslator.co/api/realtime-translator', {
  transports: ['websocket'],
  query: { apiKey: process.env.GPT_TRANSLATOR_API_KEY },
});

// Proxy events between the browser client and the translation API
browserSocket.on('translation_start', (data) => socket.emit('translation_start', data));
browserSocket.on('audio_chunk', (chunk) => socket.emit('audio_chunk', chunk));
browserSocket.on('translation_stop', () => socket.emit('translation_stop'));

socket.on('output_audio', (data) => browserSocket.emit('output_audio', data));
socket.on('output_transcript', (data) => browserSocket.emit('output_transcript', data));
socket.on('input_transcript', (data) => browserSocket.emit('input_transcript', data));
Alur Sesi

Siklus Hidup Sesi

Setiap sesi terjemahan mengikuti urutan sederhana lima langkah. Memahami urutan ini akan membantu Anda membangun integrasi yang andal.

1

Mulai sesi

Anda mengirim

Emit translation_start dengan kode bahasa target. Server akan mencadangkan saldo token Anda dan mulai menginisialisasi sesi.

socket.emit('translation_start', { "targetLanguage": "es" });
2

Tunggu sinyal kesiapan

Anda mendengarkan

Server mengirim tiga event status secara berurutan: session_initializing, translation_ready, dan terakhir ready_for_audio. Mulai kirim audio hanya setelah ready_for_audio diterima.

socket.on('session_initializing', callback);
socket.on('translation_ready', callback);
socket.on('ready_for_audio', callback);
3

Streaming potongan audio

Anda mengirim

Terus emit event audio_chunk dengan audio PCM16 yang di-encode base64 dan ditangkap dari mikrofon. Jaga ukuran potongan tetap kecil (sekitar 100 ms) untuk mendapatkan latensi terendah.

socket.emit('audio_chunk', { "audioData": "<base64-pcm16-string>" });
4

Terima hasil terjemahan

Anda mendengarkan

Saat proses terjemahan berlangsung, server melakukan streaming output_audio (suara terjemahan), output_transcript (teks terjemahan), dan input_transcript (teks sumber yang dikenali) — semuanya dalam bentuk delta bertahap.

socket.on('output_audio', callback);
socket.on('output_transcript', callback);
socket.on('input_transcript', callback);
5

Akhiri sesi

Anda mengirim

Emit translation_stop untuk menutup sesi dengan aman. Penggunaan token akan diselesaikan dan event translation_closed mengonfirmasi bahwa sesi telah berakhir.

socket.emit('translation_stop');
Referensi API

Referensi Event

Referensi lengkap dari setiap event di API Terjemahan Real-Time — apa yang Anda kirim dan apa yang Anda terima.

Event yang Anda Kirim

Anda mengirim
translation_start

Memulai sesi terjemahan baru. Kirim kode bahasa BCP-47 untuk bahasa target.

{
  "targetLanguage": "es"  // BCP-47 language code (e.g. "fr", "de", "zh", "ja")
}
audio_chunk

Mengirim potongan audio mikrofon mentah. Field audioData harus berupa buffer audio PCM16 mono yang di-encode base64 dengan sample rate 24.000 Hz.

{
  "audioData": "<base64-encoded PCM16 mono audio>"
  // Sample rate: 24 000 Hz
  // Encoding: 16-bit PCM, little-endian
  // Send continuously while the user speaks
}
translation_stop

Mengakhiri sesi dengan aman. Server menyelesaikan penagihan dan mengirim translation_closed.

Event yang Anda Dengarkan

Anda mendengarkan
session_initializingstatus

Dikirim segera setelah translation_start. Menunjukkan bahwa sesi sedang disiapkan — belum siap untuk audio.

translation_readystatus

Dikirim setelah koneksi sisi server berhasil dibuat. Masih menunggu aktivasi akhir sesi.

ready_for_audiostatus

Sesi sudah sepenuhnya aktif. Mulai streaming event audio_chunk sekarang.

output_audiostream

Potongan audio suara terjemahan. Delta adalah buffer audio PCM16 yang di-encode base64. Buffer delta berturut-turut dan putar secara berurutan.

{
  "delta": "<base64-encoded PCM16 audio chunk>"
  // Decoded and played directly to the output speaker
  // Arrives incrementally — buffer chunks for smooth playback
}
output_transcriptstream

Fragmen teks terjemahan. Gabungkan delta untuk membangun transkrip terjemahan lengkap di UI Anda.

{
  "delta": "Hola, ¿cómo estás?"  // translated text fragment
}
input_transcriptstream

Fragmen ucapan sumber yang dikenali. Gabungkan delta untuk membangun caption bahasa sumber.

{
  "delta": "Hello, how are you?"  // recognized source speech fragment
}
translation_closedstatus

Mengonfirmasi bahwa sesi telah berakhir dengan bersih — baik setelah translation_stop atau ketika server menutup sesi karena token habis.

translation_errorerror

Terjadi kesalahan tak terduga. Field message menjelaskan apa yang salah. Sesi mungkin masih aktif — Anda dapat mencoba lagi atau memanggil translation_stop.

{
  "message": "Translation session error. Please try again."
}
insufficient_tokenserror

Saldo token Anda habis. Sesi otomatis ditutup. Upgrade paket Anda untuk melanjutkan.

{
  "message": "You have reached the limit of words for translation...",
  "remainingTokens": 0
}
Contoh Kode

Contoh Integrasi Lengkap

Contoh JavaScript minimal namun lengkap yang menunjukkan cara terhubung, memulai sesi, streaming audio, menangani semua event server, dan menghentikan sesi dengan benar.

realtime-translator.js
import { io } from 'socket.io-client';

const socket = io('https://api.gpttranslator.co/api/realtime-translator', {
  transports: ['websocket'],
  query: { apiKey: 'YOUR_API_KEY' },
});

// ─── Listen for server events ───────────────────────────────────────

socket.on('session_initializing', () => {
  console.log('Session is being prepared...');
});

socket.on('translation_ready', () => {
  console.log('Session connected. Waiting for activation...');
});

socket.on('ready_for_audio', () => {
  console.log('Ready! Start streaming audio chunks now.');
  startMicrophone(); // begin capturing and sending audio
});

socket.on('output_audio', ({ delta }) => {
  // delta is a base64-encoded PCM16 audio chunk
  playAudioChunk(atob(delta));
});

socket.on('output_transcript', ({ delta }) => {
  // Append translated text delta to your UI
  appendToTranscript('translated', delta);
});

socket.on('input_transcript', ({ delta }) => {
  // Append recognized source speech to your UI
  appendToTranscript('original', delta);
});

socket.on('translation_closed', () => {
  console.log('Session ended.');
  stopMicrophone();
});

socket.on('translation_error', ({ message }) => {
  console.error('Error:', message);
  stopMicrophone();
});

socket.on('insufficient_tokens', ({ message, remainingTokens }) => {
  console.warn('Out of tokens:', message, 'remaining:', remainingTokens);
  stopMicrophone();
  showUpgradePrompt();
});

// ─── Start a session ────────────────────────────────────────────────

socket.emit('translation_start', { targetLanguage: 'es' });

// ─── Stream audio chunks ────────────────────────────────────────────

function onAudioData(pcm16Base64) {
  socket.emit('audio_chunk', { audioData: pcm16Base64 });
}

// ─── Stop the session ───────────────────────────────────────────────

function stopSession() {
  socket.emit('translation_stop');
}
Penagihan

Cara Kerja Penagihan

Terjemahan real-time ditagihkan berdasarkan durasi sesi — waktu antara sesi diaktifkan hingga translation_stop atau token habis. Tidak ada perhitungan per karakter atau per kata.

Penagihan Per Detik

Penggunaan diukur dalam detik sejak sesi sepenuhnya aktif hingga berakhir. Detik parsial dibulatkan ke atas.

📊

Token Dipotong Secara Langsung

Token dipotong dari saldo Anda di akhir setiap sesi berdasarkan durasi sebenarnya. Saldo tersedia Anda diperiksa sebelum sesi dapat dimulai.

🔒

Batas Otomatis

Sesi akan otomatis dihentikan ketika sisa saldo token Anda hampir habis. Anda akan menerima event insufficient_tokens sebelum sesi ditutup.

Perkiraan Konsumsi Token

1 menit
~3.000 token
Bagus untuk pengecekan cepat
5 menit
~15.000 token
Rapat singkat atau wawancara
30 menit
~90.000 token
Percakapan panjang
1 jam
~180.000 token
Konferensi atau kuliah
Durasi Sesi
Perkiraan Token Digunakan
Catatan

Catatan: Perkiraan token bersifat perkiraan. Konsumsi sebenarnya bergantung pada tingkat kebisingan audio dan aktivitas sesi. Periksa dashboard Anda untuk penggunaan real-time.

Panduan Audio

Persyaratan Format Audio

API mengharapkan format audio tertentu untuk akurasi terbaik dan latensi terendah. Gunakan cuplikan kode di bawah ini untuk menangkap dan mengonversi audio mikrofon di browser.

FormatPCM 16-bit, little-endian
Sample Rate24 000 Hz
Channel1 (mono)
Transfer EncodingBase64 string
Penangkapan mikrofon browser
// Capture PCM16 audio from the browser microphone
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const audioContext = new AudioContext({ sampleRate: 24000 });
const source = audioContext.createMediaStreamSource(stream);
const processor = audioContext.createScriptProcessor(4096, 1, 1);

processor.onaudioprocess = (e) => {
  const float32 = e.inputBuffer.getChannelData(0);

  // Convert Float32 → Int16 PCM
  const int16 = new Int16Array(float32.length);
  for (let i = 0; i < float32.length; i++) {
    int16[i] = Math.max(-32768, Math.min(32767, float32[i] * 32768));
  }

  // Base64-encode and send
  const base64 = btoa(String.fromCharCode(...new Uint8Array(int16.buffer)));
  socket.emit('audio_chunk', { audioData: base64 });
};

source.connect(processor);
processor.connect(audioContext.destination);

Pertanyaan yang Sering Diajukan

Pertanyaan umum tentang integrasi dan penggunaan API Terjemahan Real-Time.